2009-10-27 28 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'将会保存导入语句并使问题更好地回答。 –