Python读取文件陷入无限循环
我有一个文件,里面的内容是这样的:
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
的唯一实例)。