Python 输入 .txt 文件

Python Input .txt Files

我正在独立学习 Python,更具体地说是关于文件 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' 循环,但实际上它是如何工作的?

如果 in_line 为 false,则没有剩余行可读,break 将中断 while 循环,以便程序可以在文件中没有更多内容可读时结束。

file.readline() method returns 没有更多行可读时的空字符串:

When size is not 0, an empty string is returned only when EOF is encountered immediately.

条件测试该结束条件,以结束循环。 if not in_line: 仅当 in_line 为空字符串时才为真。 Python 中的所有 'empty' 值都被认为是 false,并且 not 运算符将 false 变为 True。见 Truth Value Testing section:

Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below. The following values are considered false:

[...]

  • any empty sequence, for example, '', (), [].

在这里使用 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