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)
这是我的例子:
我的档案:
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)