2009-10-27 60 views
38

有一個班輪閱讀Python中的文件中的所有行,而不是標準:Python的文件啜食

f = open('x.txt') 
cts = f.read() 
f.close() 

看起來這是這樣做往往有一定是一個單襯墊。有任何想法嗎?

+13

好笑的是,我又需要這一點,我用Google搜索它。沒想到我自己的問題就來了:) –

+0

我還留着找到這個時候,我實際上是尋找http://stackoverflow.com/questions/1450393/how-do-you-read-from-stdin-in-python – tripleee

回答

87

這會發出聲音的內容合併到一個字符串在Python 2.6 及以上:

with open('x.txt') as x: f = x.read() 

,這將創建行的列表:

with open('x.txt') as x: f = x.readlines() 

這些方法保證立即關閉在讀取之後立即輸入文件。

腳註:

  1. 該方法也在Python 2.5使用from __future__ import with_statement使用。

一箇舊的做法,保證立即關閉就是用它來創建一個字符串:

f = open('x.txt').read() 

這創造行的列表:

f = open('x.txt').readlines() 

實際上它會立即在某些版本的CPython中關閉,但關閉「只有當垃圾收藏家在Jython,IronPython和CPython的未來版本中都可以使用它。

+0

這就是我會猜到的,但不知道什麼時候打開的文件會被關閉。謝謝! –

-1

如果你在Python3,請務必正確尊重你的文件的輸入編碼,例如:

import codecs 
with codecs.open(filename, 'r', encoding="utf8") as file: 
    cts = file.read() 

查找編解碼器的名稱在Python3 codec list列表。 (該機制也是可取的Python2,只要你想到的任何非ASCII輸入)

+0

我想知道爲什麼這是被拒絕的。 –

+2

有些人可能會認爲編碼問題是無關緊要的。另外,我的代碼並不是最小的:在open(filename,'r',encoding ='utf8')中使用builtin'open'將會保存導入語句並使問題更好地回答。 –