2016-10-18 6 views
0

私は、ループとファイル用のPythonに関する質問があります。このコードでファイルオブジェクトに対してforループが何をしていますか?

file = raw_input("input a text file ") 

f = open(file) # creates a file object of file 

for line in f: 
    # prints each line in the file 
    print line 



print f 

# prints <open file 'MVL_ref.txt', mode 'r' at 0x0267D230> 

print f.read() # same output of the for-cycle 
print f.readline() # same output of the for-cycle 

ザ・forループは、私のテキスト ファイル内に存在するそれぞれの行を印刷しています。しかし、私がファイルオブジェクトを印刷すると、私は全く別のものを手に入れます。 私は私のようなものを使用しなければならなかったことを期待するので、これは私を困惑:

for line in f.read(): 
    print line 

もちろん、これはそうではありません

。 forループなしでreadまたはreadlineメソッドを使用すると、forループの同じ出力が得られます。

ファイルオブジェクトのデフォルトでread()またはreadline()を呼び出すようなfor-loopがいくつかありますか?私はPythonでコーディングする方法を学んでいますが、コードが "背中の背中"で何をしているのか分かりません。

すべての説明をいただきありがとうございます。

+3

エンティティの説明が表示されますそれは何をしているのですか? –

+0

'for line in f.read():' ...あなたの変数名を混同しないでください。それらは行ではなく、それらは単一の文字です –

+0

実際にあなたがtxtファイルに持っているものに依存します。行が既に改行文字 "\ n"で区切られていれば、**使用する必要はありません。メソッド –

答えて

2

Pythonのファイルオブジェクトはiterableなので、ファイルの行を1つずつ取得するために、それを反復処理することができます。ファイルは、コレクションが、オブジェクトではありませんが

- あなたは、コレクション

l = ["line1", "line2"] 
print l 

を出力するときに、このように印刷することにより、すべての行が表示されませんが、あなたはコメントは正確に言う

<open file 'path_to_the_file', mode 'r' at 0x0245D020> 
+0

説明をありがとう。つまり、for-loopの場合、ファイルオブジェクトはコレクションのように振る舞います – Faber

+0

はい、それはあなたが行を1つずつ取得することを可能にするイテレータを返すことができるためです –

+0

あなたの最後の答えは、iterator、iterable、__iter__ 、次と他のもの。実際にループの後ろに起こっている事はたくさんありますが、私は全く無視しています。ありがとう、男! – Faber

関連する問題