我的文件包含以下内容:
a
b
c
d
我正在使用以下代码在Python中阅读:
f = open('foo.txt')
w = f.readline()
while w is not '' :
print w
w = f.readline()
根据docs
如果f.readline()返回一个空字符串,则已到达文件末尾
为什么我会进入无限循环?
答案 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块短得多。