我有一个包含以下内容的文件:
a
b
c
d
我正在使用以下代码在 Python 中阅读此内容:
f = open('foo.txt')
w = f.readline()
while w is not '' :
print w
w = f.readline()
根据文档
如果 f.readline() 返回一个空字符串,则已到达文件末尾
那为什么我会进入无限循环呢?
is
运算符测试两个引用是否引用完全相同的对象。在这种情况下,您需要按照您的说明进行相等性检查。
发生无限循环是因为虽然它返回了''
,但它是str
. 不同的实例,但相同的值。
Python 可能会选择也可能不会选择作为重用现有str
对象的优化(毕竟它们是不可变的)。但是,您通常不应该依赖这种类型的行为,除非文档特别提及(例如,None
因为它是 的唯一实例NoneType
)。
这是有趣的。
如果你更换
而 w 是 ''
和
而 w != ''
代码将成功运行。
这意味着 readline() 返回空字符串的新实例,而不是返回执行时获得的全局实例
s = ''
t = ''
assert s is t
尝试这个
f = open('foo.txt')
while 1:
line = f.readline()
if not line:
break
print line
with open('workfile', 'r') as f:
read_data = f.read()
f.closed
在处理文件对象时,最好使用 with 关键字。这样做的好处是文件在其套件完成后正确关闭,即使在途中引发异常也是如此。它也比编写等效的 try-finally 块要短得多。