2017-04-14 1 views
-1

は、私が持っていると言う:なぜreadline()はreadlines()の後に動作しないのですか? Pythonで

f = open("file.txt", "r") 
    a = f.readlines() 
    b = f.readline() 
    print a 
    print b 

print aは、ファイルのすべての行が表示され、print bは何も表示されません。

同様にその逆:

f = open("file.txt", "r") 
    a = f.readline() 
    b = f.readlines() 
    print a 
    print b 

print aは、最初の行を示しているが、print bは、最初のものを除いてすべての行を表示します。

ab両方がreadlines(ある場合)、aは、すべての行が表示され、bは何も表示されません。

どうしてですか?どちらのコマンドも互いに独立して動作するのはなぜですか?このための回避策はありますか?

+2

Readlinesはすべての行を読み取ります。したがって、ファイルの先頭まで検索しない限り、読み込むことはできません。 –

答えて

3

最初に.readlines()を実行すると、.readline()がフェッチ元となるすべての読み取りバッファが消費されます。あなたが最初に戻るには、彼の答えですでに言及されている@ abccdとして.seek(0)を使用してください。 readlinesは、ファイル内のすべての行を読んで、その行を読み取るために残されたではありません

>>> from StringIO import StringIO 
>>> buffer = StringIO('''hi there 
... next line 
... another line 
... 4th line''') 
>>> buffer.readline() 
'hi there\n' 
>>> buffer.readlines() 
['next line\n', 'another line\n', '4th line'] 
>>> buffer.seek(0) 
>>> buffer.readlines() 
['hi there\n', 'next line\n', 'another line\n', '4th line'] 
2

ので、あなたが最初に戻って、そこから読み取ることがf.seek(0)を使用することができ、ファイルを再度読み込みます。

1

ファイルには、読み書きするたびに更新されるバイトオフセットがあります。今

with open("file.txt") as f: 
    a = f.readlines() 
    f.seek(0) # seek to the beginning of the file 
    b = f.readline() 

aは、すべての行で、bはちょうど最初の行である:これは、あなたが最初に期待したものでしょう。

関連する問題