以下の 2 つの方法の行ごとにファイルを読み取る Pythonic の方法は何ですか?
with open('file', 'r') as f:
for line in f:
print line
また
with open('file', 'r') as f:
for line in f.readlines():
print line
または、私が見逃しているものがありますか?
以下の 2 つの方法の行ごとにファイルを読み取る Pythonic の方法は何ですか?
with open('file', 'r') as f:
for line in f:
print line
また
with open('file', 'r') as f:
for line in f.readlines():
print line
または、私が見逃しているものがありますか?
ファイル ハンドルは独自のイテレータです (具体的には、イテレータ プロトコルを実装します)。
with open('file', 'r') as f:
for line in f:
# code
好ましい使用法です。 f.readlines()
行のリストを返します。これは、ファイル全体をメモリに吸収することを意味します -> 一般に、特に大きなファイルの場合はお勧めできません。
コンテキスト マネージャーが価値があるという意見に同意し、私のコード例に 1 つ含めたことを指摘しておく必要があります。
あなたが提示した2つのうち、1つ目は推奨される練習です。コメントで指摘されているように、コンテキストマネージャーを使用しないソリューション (以下のような) は、ファイルが開いたままになることを意味します。これは悪い考えです。
ぶら下がっているファイルハンドルを残す元の回答に従うべきではありませんf
ただし、行を読み取る以外の目的で
必要がない場合は、次のようにできます。
for line in open('file', 'r'):
print line
.readlines()メソッドを呼び出す必要はありません。
PLUS:ステートメント付きについて
withステートメントの実行動作は以下のとおりです。
with open("xxx.txt",'r') as f:
// now, f is an opened file in context
for line in f:
// code with line
pass // when control exits *with*, f is closed
print f // if you print, you'll get <closed file 'xxx.txt'>