Python输入.txt文件

时间:2015-02-17 10:40:07

标签: python file-io

我正在独立学习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'循环,但它实际上是如何工作的?

2 个答案:

答案 0 :(得分:2)

当没有更多行要读取时,file.readline() method返回一个空字符串:

  

size 不为0时,只有在立即遇到EOF时才返回空字符串。

条件测试该结束条件,结束循环。 if not in_line:仅在in_line为空字符串时才为真。所有人都空着#39; Python中的值被视为false,not运算符将false变为True。请参阅Truth Value Testing section

  

可以测试任何对象的真值,以便在ifwhile条件下使用,或者作为下面布尔运算的操作数。以下值被视为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循环,因此当没有其他内容可以从文件中读取时,程序可以结束。