Pythonのcsv.DictReaderをlistに食わしたときの挙動についての疑問メモ
Pythonのcsv.DictReaderの使い方でよくわからないことメモ
普段からPythonを使っているわけではないので、 pythonista
の方々からしたら、こういうのは常識なのかもしれない。
が少しハマったのでメモを残す。
下記のようなコードを書いて実行する。
import csv def test_dict_reader(): with open('./csv_file_path.csv') as f: data = csv.DictReader(f) count = len(list(data)) print(count) for d in data: # ←ここは動かない print(d) if __name__ == "__main__": test_dict_reader()
このコード、ループになっている箇所が動かない。
下記のようにコードを修正すると、動かなかったループのところが動くようになる。
import csv def test_dict_reader(): with open('./csv_file_path.csv') as f: data = csv.DictReader(f) # count = len(list(data)) # print(count) for d in data: print(d) if __name__ == "__main__": test_dict_reader()
これはPythonの言語仕様が参照渡しであるため、 count = len(list(data))
のところで中身が変わってしまったのだろうと推測している。
ただ、 print(type(data))
でtype名を出してみると、どちらも <class 'csv.DictReader'>
が出ていて、本当に中身が異なっているかがどうかがわからない。
また、そもそもlistに変わっていても[{dict}, {dict2}, ...]
みたいな形になるので、ループは正常に動くのではないだろうか?
と、ここまで検証したところで力が尽きた...
もしご存知の方がいましたらコメントいただけると幸いです m(_ _)m