Python读取文件陷入无限循环

1 投票
4 回答
2661 浏览
提问于 2025-04-17 17:24

我有一个文件,里面的内容是这样的:

a  
b  
c  
d

我在用Python读取这个文件,使用的代码是:

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

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

根据文档的说法:

如果f.readline()返回一个空字符串,那就说明文件已经读到头了。

那为什么我会陷入一个无限循环呢?

4 个回答

1

这真有意思。

如果你把

while w is ''

换成

while w != ''

那么代码就能成功运行了。

这意味着 readline() 返回的是一个新的空字符串,而不是你在执行

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

时得到的全局空字符串。

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

在处理文件对象时,使用with关键字是个好习惯。这样做的好处是,即使在执行过程中出现了错误,文件也会在操作完成后被正确关闭。而且,这种写法比起用try-finally语句块要简洁很多。

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

5

is 操作符用来检查两个引用是否指向 完全相同的对象。在你的情况下,你想要的是一个相等性检查,正如你所提到的。

出现无限循环的原因是,虽然它返回了 ''(空字符串),但这是一个不同的 str 实例。不同的实例,但值是一样的。

Python 可能会选择优化,重用一个已有的 str 对象(毕竟它们是不可变的)。不过,通常情况下你不应该依赖这种行为,除非文档特别提到(比如 None,因为它是 NoneType 的唯一实例)。

撰写回答