在Python中,是否可以同时使用read()和readline()来读取同一个文本文件?
当我尝试这样做时,只有第一个读取函数会执行。
file = open(name, "r")
inside = file.readline()
inside2 = file.read()
print(name)
print(inside)
print(inside2)
结果仅显示
inside
变量,而不是inside2
。在Python中,是否可以同时使用read()和readline()来读取同一个文本文件?
当我尝试这样做时,只有第一个读取函数会执行。
file = open(name, "r")
inside = file.readline()
inside2 = file.read()
print(name)
print(inside)
print(inside2)
inside
变量,而不是inside2
。读取文件就像读书一样。当你使用.read()
时,它会一直读到书的末尾。如果你再次使用.read()
,那么你忘记了翻回到开始的那一页。除非你把页面翻回到开头,否则不能再次阅读它。如果你使用.readline()
,我们可以把它称为一页。它告诉你页面的内容,然后翻到下一页。现在,使用.read()
会从那一页开始,并一直读到末尾。这第一页不包括在内。如果你想从开头开始读取,你需要翻回到第一页。做到这一点的方法是使用.seek()
方法。它接受一个单一的参数:要查找的字符位置:
with open(name, 'r') as file:
inside = file.readline()
file.seek(0)
inside2 = file.read()
还有另一种从文件中读取信息的方式。当您使用for
循环时,它会在幕后使用:
with open(name) as file:
for line in file:
...
next(file)
,它会给你下一行。然而这种方式有点特殊。如果在next(file)
之后使用file.readline()
或file.read()
,你将会得到一个错误,因为混合迭代和读取方法会丢失数据。(感谢Sven Marnach指出这一点。)next(file)
和 file.readline()
。 - Sven Marnachnext()
使用一个单独的缓冲区,而 readline()
不会看到这个缓冲区。因此,在使用 next(f)
后调用 f.readline()
时,你可能会跳过文件的某些部分。 - Sven Marnach可以的。
file.readline()
从文件中读取一行(在这种情况下是第一行),然后 file.read()
从 seek 位置开始读取文件的其余部分,即从 file.readline()
结束的位置开始。
你使用 f.read()
接收到一个空字符串,可能是因为你在使用 file.readline()
读取第一行后立即到达了文件结尾(EOF),这意味着你的文件只包含一行。
但是你可以通过将 seek 位置移动到开头来返回到文件的开头,使用 f.seek(0)
。
readline
函数后,调用read
函数将不会读取文件的第一行。因此,如果你的文件只有一行内容,那么在调用read
函数时将不会输出任何内容。 - B. Eckles