Python中的读取文件进入无限循环

时间:2013-02-28 04:03:23

标签: python

我的文件包含以下内容:

a  
b  
c  
d

我正在使用以下代码在Python中阅读:

f = open('foo.txt')
w = f.readline()

while w is not '' :
  print w
  w = f.readline()

根据docs

  

如果f.readline()返回一个空字符串,则已到达文件末尾

为什么我会进入无限循环?

4 个答案:

答案 0 :(得分:5)

is运算符测试两个引用是否引用完全相同的对象。在这种情况下,您需要进行相同检查。

发生了无限循环,因为虽然它返回'',但它是str的另一个实例。不同的实例,但价值相同。

Python可能会也可能不会选择作为优化来重用现有的str对象(毕竟它们是不可变的)。但是,除非文档特别提到(例如None,因为它是NoneType的唯一实例),否则您不应该依赖此类行为。

答案 1 :(得分:1)

这很有趣。

如果您更换

  

而w是''

  

而w!=''

代码将成功运行。

这意味着readline()返回空字符串的新实例,而不是返回执行时获得的全局实例

s = ''
t = ''
assert s is t

答案 2 :(得分:1)

试试这个

f = open('foo.txt')

while 1:
    line = f.readline()
    if not line:
        break
    print line

答案 3 :(得分:1)

with open('workfile', 'r') as f:
  read_data = f.read()
f.closed

在处理文件对象时,最好使用with关键字。这样做的好处是,即使在路上引发异常,文件也会在套件完成后正确关闭。它也比编写等效的try-finally块短得多。

请参阅此链接:http://docs.python.org/2/tutorial/inputoutput.html