readline() 函数在 Python 中是如何工作的?

How does readline() function really work in Python?

这是我的例子:

我的档案:

abefgh
2345
6^7&8*
31
1
1

我的代码:

handle = open('TestFile','r')
for line in handle:
    print(handle.readline())
    

输出:

2345
31
1

为什么它只打印交替行?

谢谢大家。现在我明白了每次我 运行 readline() 命令。光标移动到行尾。所以下次它会从下一行开始读取。 请投票,以便我可以再次 post 提问。我不能再 post 提问了。提前致谢!

在您的代码中:

handle = open('TestFile','r')
for line in handle:
    print(handle.readline())

循环 for line in handle 已经从 handle 读取了一行。然后使用 handle.readline() 读取 next 行并打印它。每次迭代都会发生这种情况,因此您只会得到每一行。

这里要意识到的重要一点是 .readline() 不记得它在哪里,handle 记得。因此,当您打开 handle 时,它位于文件的开头。然后,当 for 获取下一行时,它位于第二行的开头。然后 readline() 读取并包括下一行的末尾,因此它在第三行的开头,依此类推

你想要:

handle = open('TestFile','r')
for line in handle:
    print(line)

此外,您想关闭文件,理想情况下您希望确保它们关闭而不必担心自己关闭它们,这就是上下文管理器的用途。听起来很复杂,其实很简单:

with open('TestFile', 'r') as handle:
    for line in handle:
        print(line)

这是可行的,因为像 handle 这样的文件句柄也是一个迭代器,并提供了一个 __next__ 方法。这意味着您可以使用 for 遍历它,它将一次产生一个元素的内容。在文本文件的情况下,这意味着它会读取一行并产生它,每次调用其 __next__ 方法时,无论是作为 next(handle) 还是当循环使用 for.

with 块确保 handle 关闭,一旦 with 块退出。

最后,您可能会想知道为什么打印的行之间有一个空行。那是因为你的文件是一个文本文件,其中行由某种行尾字符(或 Windows 上的字符)分隔。

摆脱这些的一种方法是去除行尾的空白:

with open('TestFile', 'r') as handle:
    for line in handle:
        print(line.rstrip())

另一种方法是读取整个文件,拆分行结尾,结果行将不再有行结尾:

with open('TestFile', 'r') as handle:
    for line in handle.read().splitlines():
        print(line)