5

Python スクリプトで大きな .csv ファイル (16k 行以上、最大 15 列) を開こうとしていますが、問題が発生しています。

組み込みの open() 関数を使用してファイルを開き、入力ファイルを使用して csv.DictReader を宣言します。ループは次のように構成されています。

for (i, row) in enumerate(reader):
     # do stuff (send serial packet, read response)

ただし、約 20 行を超えるファイルを使用すると、ファイルは開きますが、数回の反復で ValueError: I/O operation on a closed file が発生します。

私の考えでは、メモリが不足している可能性があります (ただし、16k 行のファイルは 8MB しかなく、RAM は 3GB あります)。一度にメモリにファイルします。

私は正しい軌道に乗っていますか?または、ファイルが予期せず閉じてしまう他の原因が考えられますか?

編集:11行のcsvでこれを実行する約半分の時間で、ValueErrorが発生します。エラーは常に同じ行で発生するとは限りません

4

2 に答える 2

4

16k 行は 3GB RAM では問題ありません。おそらく、問題は別の何かです。たとえば、開いているファイルに干渉する他のプロセスに時間がかかりすぎているなどです。念のため、3GBのRAMを使用している場合の速度のために、ファイル全体をメモリにロードしてから、たとえば解析します

import csv
import cStringIO
data = open("/tmp/1.csv").read()
reader = csv.DictReader(cStringIO.StringIO(data))
for row in reader:
    print row

これで、少なくともファイルオープンエラーが発生することはありません。

于 2011-06-15T23:44:44.490 に答える