2016-08-18 11 views
2

私が辞書形式で各ファイルの行を読み取ることができる場合も、そのファイルを処理するために非常に容易になります、ファイルのほぼ100K行の大きなCSVファイルを読み込む必要があります。csv.DictReaderはファイルをメモリに保存しますか?

少し研究した後、私はcsvモジュールからPythonの組み込み関数csv.DictReaderを発見しました。

しかし、マニュアルにメモリにファイル全体を保存するかどうか上記のは明らかではありません。

しかし、ことを述べている:フィールド名パラメータがその要素の順序で入力データのフィールドに関連付けられたシーケンスである

しかし、シーケンスがメモリに格納されているかどうかはわかりません。

は、そこで問題は、それがメモリにファイル全体を保存するんですか?

その場合は、ファイルからgeneraror式として単一の行を読み、辞書のように行を取得するために読んで、他のオプションがあります。ここで

が私のコードです:限りイムとして認識して

def file_to_dictionary(self, file_path): 
    """Read CSV rows as a dictionary """ 
    file_data_obj ={} 
    try: 
     self.log("Reading file: [{}]".format(file_path)) 
     if os.path.exists(file_path): 
      file_data_obj = csv.DictReader(open(file_path, 'rU')) 
     else: 
      self.log("File does not exist: {}".format(file_path)) 
    except Exception as e: 
     self.log("Failed to read file.", e, True) 
    return file_data_obj 

答えて

3

作成しDictReaderオブジェクトは、あなたのケースfile_data_objには、発電型オブジェクトです。

ジェネレータオブジェクトがメモリに格納されていないが、一回だけしか巡回することができます!

あなたは、単に使用できるリストとして、あなたのデータのフィールド名を印刷するには:print file_data_obj.fieldnames

は第二に、私の経験では、私は、CSVファイルからデータを読み込むとき、それははるかに簡単に辞書のリストを使用することを見つけ、各辞書ファイル内の行を表します。次のことを考慮してください:

上記の機能(または同様の機能)を使用すると、2本の線で目標を達成できます。例:

data, data_fields = csv_to_dict_list(path) 
print data_fields (prints fieldnames) 
print data[0] (prints first row of data from file) 

ルーク

関連する問題