Pythonでサイズの大きなCSVファイルを読みながら処理する方法

2013-02-11
このエントリーをはてなブックマークに追加

ファイル読んで処理するだけなら別に難しいことなんてなんもないんですけど、何百MBもあるようなファイルを読み込むときには気をつけたほうがよかったりします。
単純に

for _line in open('samplefile.csv', 'r'):
    print(_line)

とかの書き方をすると、ファイルをごそっとメモリ上にロードします。つまり、300MBのファイルを読めば、メモリも300MB持っていかれます。これは恐ろしい。

ファイルが小さい、メモリ上に展開しても問題ないサイズであることが担保されているのであれば上記の方法でまったく問題ないです。

大きいファイルを読みたいときは

_f = open('samplefile.csv', 'r')
_line = _f.readline()

while _f.readline():
while _line:
    print(_line)
    _line = _f.readline()
_f.close

こうしておくと一行ずつ読みこんでくれるのでメモリ消費は最低限で済む、はずです。

もうちっときれいに書ける気もするのですが、とりあえずメモ。

Python2.7で動作。

追記
吉田氏に指摘もらって直しました。お恥ずかしい。感謝。

Tags: