2017-03-06 5 views
1

に保存されているのに、なぜ.read()コマンドが異なることをするのかは、私はターミナルでやっているものです:私は.readを使用する場合出力はここで変数

>>> file1 = open('file1.txt', 'r') 
>>> file1.read() 
    'Content 1' 
>>> new_file1 = file1.read() 
>>> print(new_file1) 

なぜそれがあることです( )command to file1私はファイルの内容を取得しますが、を保存すると、出力に変数が保存されますが、空の文字列が表示されますか?

+4

あなたは既にファイルを読んでいます。あなたがもっと読むことを試みるときに読むことはもうありません。ファイルポインタ( 'file1.seek(0)')をリセットするか、ファイルを閉じて再度開きます。 – dsh

+2

'dshとは何か?もちろん、同じファイルデータを複数回読み取ることを避けることができれば、より効果的です。 –

+0

ああ、ありがとう:) –

答えて

1

fileはイテレータであり、ファイルを読むとイテレータが使い果たされます。つまり、最初のread()はそれを使います。

は再び同じファイルを読むには、あなたはどちらか近いし、ファイルを再度開く、または先頭に戻って、ファイルの内部ポインタを移動することができます。 file1.seek(0)

NBfile sがこのよう特別です。ほとんどのイテレータはリセットできません。

+1

ファイルは* just * iterableではありません。 iterableであるほとんどのものは、複数回反復することができます(リストなど)。しかし、ファイル*はイテレーター*です。イテレータは通常一度しか使用できません。ファイルは、あなたが使い終わった後で始点に戻ることを可能にすることによって、反復子プロトコル上でちょっと騙されます。ほとんどのイテレーターはあなたにそれをさせません。 – Blckknght

+0

@Blckknght:ありがとう、固定。 –

関連する問題