知り合いの blog で書かれていたタイトルを見てふと思い出した Python でのお話。
Python のファイルオブジェクトには readlines() という便利な命令があります。普段簡単なスクリプトを組むときは使うのですが、readlines() はいったんメモリに読み込むため、大きな行数があるファイルを読むときに使うと使用メモリが一気に増大して悲惨なことになります。
というか、サーバのログファイルを整理するスクリプトを組んでいて気づいたのですね。
で、まぁ、readline() を使えばいいのですが…そのとき組んだのが以下のような感じ。
fp = open(filename, 'rb') while True: l = fp.readline() if len(l) < 1: break l = l.rstrip() # 以下なんかの処理
な~んか美しくないんだよなぁ…この書き方(^^ゞ
ふと思ったけど Python 2.5 以降なら with ステートメントを使うのがよかったのかな?
with open(filename, 'rb') as f:
....for line in f:
........line = line.rstrip()
........# 以下なんかの処理
こんな感じ。(...はインデントの為)
こんにちは、takaomag さん。
そうなんですよね、with ステートメントを使うのが美しいのですけど、動かないバージョンでどうするかを考えるとちょっと悩んでしまうのです。
まぁ、2.3環境なんて残っていないから無視してもいいかな(^^ゞ