with open('file') as f:
print('\n'.join(f.readlines()[:10]))
いくつかの更なる説明:あなたのコードを修正することができ
最短と最悪方法は、コードを1行追加することである:
with open('file') as f:
for i in range(0,10):
f.seek(0) # Add this line
print([line.strip('\n') for line in f][i])
を今すぐあなたのコードは動作します - しかし、これはです恐ろしいあなたのコードを動作させる方法。 理由は、コードが最初に期待したとおりに動作しないということは、ファイルが消耗品のイテレータであることです。それは、あなたが読んだときに、最終的に読むことがなくなることを意味します。あなたはそれが何も出力しないことがわかります
print(file.read())
:ここでは簡単な例です:あなたはファイルから読み取るしようとした場合
import io
file = io.StringIO('''
This is is a file
It has some lines
okay, only three.
'''.strip())
for line in file:
print(file.tell(), repr(line))
これは今
18 'This is is a file\n'
36 'It has some lines\n'
53 'okay, only three.'
を出力します。これは、ファイルを "消費した"ためです。私は明らかにまだディスク上にありますが、イテレータはファイルの最後に達しています。しかし、示されているように、あなたはファイルを探すことができます。
print(file.tell())
file.seek(0)
print(file.tell())
print(file.read())
ファイル全体が表示されます。しかし、他のポジションはどうですか?私たちは、ファイルから読み込むときに
file.seek(36)
print(file.read(4)) # => okay
print(file.tell()) # => 40
するか、私たちは、イテレータを消費しての最後に取得することを反復処理:サイドノートとして
file.seek(36)
print(file.read()) # => okay, only three.
、あなたも読むことをどのくらい指定することができますファイル。新しいツールを使用して元のコードに戻り、何が起きているのかを探そう。
with open('file') as f:
print(f.tell())
lines = [line.rstrip('\n') for line in f]
print(f.tell())
print(len([line for line in f]))
print(lines)
ファイル内の別の場所にいることがわかります。そして、2番目のリストの理解は空のリストを生成します。これは、リストの理解度が評価されると直ちに実行されるからです。あなたがこれを行うときに:あなたが最初の時間をやって何
for i in range(10):
print([line.strip('\n') for line in f][i])
、i = 0
をして、リストの内包は、ファイルの最後まで読み込みます。これで、リストの最初の要素、つまりファイルの最初の行が[0]
番目の要素になります。しかし、ファイルイテレータはファイルの最後にあります。
これでリストの先頭に戻り、i = 1
に戻ります。今度はファイルの最後まで繰り返しますが、すでに終わっているため、読み込む行はありません。[]
の[0]
の要素を取得しようとしています。しかし、そこには何もありません。だから我々はIndexError
を得る。
リストコンパイル便利ですが、開始時にはforループを作成してリストの理解に変換する方がはるかに簡単です。
with open('file') as f:
for i, line in enumerate(file, start=10):
if i < 10:
print(line.rstrip())
今、私たちはリスト内包の内側に印刷するべきではありませんので、代わりに私たちはすべてのものを収集します:だからあなたは、このような何かを書くかもしれません。私たちは、私たちが望むものを入れてから始める:
[line.rstrip() for i, line in enumerate(f)
そして最後に、フィルタおよび当社の閉じ括弧を追加します:
[line.rstrip()
は今少しのための追加リストの詳細については
[line.rstrip() for i, line in enumerate(f) if i < 10]
をこれは素晴らしいリソースです:http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/
お試しください:open( 'file')としてf: for f.readlines()内の行: – eyllanesc
@eyllanescまたは 'for line in f' –