我正在独立学习Python,更具体地说是在File I | O。
为了加载文本文件,我被教导使用.readline()函数,并使用以下代码。
in_file = open (filename, "rt")
while True:
in_line = in_file.readline ()
if not in_line:
break
in_line = in_line [:-1]
name, number = in_line.split (",")
dic [name] = number
in_file.close ()
我正在尝试了解代码的内容,我无法理解这一行:
if not in_line:
break
我知道需要突破'while'循环,但它实际上是如何工作的?
答案 0 :(得分:2)
当没有更多行要读取时,file.readline()
method返回一个空字符串:
当 size 不为0时,只有在立即遇到EOF时才返回空字符串。
条件测试该结束条件,结束循环。 if not in_line:
仅在in_line
为空字符串时才为真。所有人都空着#39; Python中的值被视为false,not
运算符将false变为True
。请参阅Truth Value Testing section:
可以测试任何对象的真值,以便在
if
或while
条件下使用,或者作为下面布尔运算的操作数。以下值被视为false:[...]
- 任何空序列,例如
''
,()
,[]
。
在这里使用while
循环实际上过于冗长。您可以使用for
循环更加简洁地读取文件,使文件成为迭代器:
for in_line in in_file:
in_line = in_line.rstrip('\n')
无法保证换行以换行符结尾;上面的str.rstrip()
调用只有在实际存在时才会删除。
最后但并非最不重要的是,您可以将文件对象用作上下文管理器;将打开的文件对象传递给with
语句会确保在块完成时自动再次关闭文件,即使发生异常:
with open(filename, "rt") as in_file:
for in_line in in_file:
in_line = in_line.rstrip('\n')
并且不再需要单独的in_file.close()
来电。
另请参阅教程中的Methods of File Objects section。
答案 1 :(得分:1)
如果in_line
为false,则没有剩余的行可供读取,break
将打破while循环,因此当没有其他内容可以从文件中读取时,程序可以结束。