1

我有一个包含以下内容的文件:

a  
b  
c  
d

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

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

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

根据文档

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

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

4

4 回答 4

5

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

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

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

于 2013-02-28T04:11:31.410 回答
1

这是有趣的。

如果你更换

而 w 是 ''

而 w != ''

代码将成功运行。

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

s = ''
t = ''
assert s is t
于 2013-02-28T04:14:48.050 回答
1

尝试这个

f = open('foo.txt')

while 1:
    line = f.readline()
    if not line:
        break
    print line
于 2013-02-28T04:16:19.923 回答
1
with open('workfile', 'r') as f:
  read_data = f.read()
f.closed

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

参考这个链接:http ://docs.python.org/2/tutorial/inputoutput.html

于 2013-02-28T09:07:27.843 回答