web-dev-qa-db-ja.com

file.read()またはfile.readlines()をいつ使用する必要がありますか?

開いたファイルを繰り返し処理する場合、「読み取り」せずに繰り返し処理する方がはるかに高速であることに気付きました。

つまり.

l = open('file','r')
for line in l:
    pass (or code)

よりもはるかに高速です

l = open('file','r')
for line in l.read() / l.readlines():
    pass (or code)

2番目のループには約1.5倍の時間がかかり(まったく同じファイルでtimeitを使用し、結果は0.442対0.660)、同じ結果が得られます。

だから-.read()または.readlines()をいつ使用する必要がありますか?

私は常に読んでいるファイルを繰り返し処理する必要があるので、.read()が大きなデータに対してどれほど痛々しいほど遅いかを学んだ後、それを再び使用することを想像することはできません。

19
David Refaeli

あなたの質問に対する簡単な答えは、ファイルのビットを読み取るこれらの3つの方法のそれぞれが異なるユースケースを持っているということです。上記のように、f.read()はファイルを個別の文字列として読み取るため、ファイル全体の正規表現検索や置換など、ファイル全体の操作を比較的簡単に行うことができます。

f.readline()はファイルの1行を読み取り、ユーザーは必ずしもファイル全体を読み取ることなく1行を解析できます。また、f.readline()を使用すると、ファイルの形式が途中で変更された場合など、完全な行ごとの反復よりも、ファイルを読み取るロジックを簡単に適用できます。

構文for line in f:を使用すると、ユーザーは質問に記載されているように、ファイルを1行ずつ繰り返すことができます。

(他の回答で述べたように、このドキュメントは非常に良い読み物です):

https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

編集:以前に、forlineの繰り返し中にreadline()を使用して行をスキップできると主張されていました。ただし、これはpython 2.7では機能せず、おそらく疑わしい慣習であるため、この主張は削除されました。

編集:f.readline()とf.read()のユースケースの例を追加しました

16
Checkmate

お役に立てれば!

https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

サイズが省略されるか負の場合、ファイルの内容全体が読み取られて返されます。ファイルがマシンのメモリの2倍の大きさであれば問題です

すべての編集でごめんなさい!

ファイルから行を読み取るために、ファイルオブジェクトをループできます。これはメモリ効率が良く、高速で、シンプルなコードにつながります。

for line in f:
    print line,

This is the first line of the file.
Second line of the file
1
Rudi