在Python中,假设我有:
f = open("file.txt", "r")
a = f.readlines()
b = f.readline()
print a
print bprint a将显示文件的所有行,而print b将不显示任何内容。
反之亦然:
f = open("file.txt", "r")
a = f.readline()
b = f.readlines()
print a
print bprint a显示第一行,但print b将显示除第一行以外的所有行。
如果a和b都是readline(),则a将显示所有行,而b将不显示任何内容。
这一切为什么要发生?为什么这两个命令不能相互独立地工作?有解决这个问题的办法吗?
发布于 2017-04-15 03:15:33
因为首先执行.readlines()将消耗所有的读缓冲区,而不会留下任何可供.readline()从中获取的内容。如果你想回到开始,使用.seek(0)作为@abccd已经在他的回答中提到。
>>> from StringIO import StringIO
>>> buffer = StringIO('''hi there
... next line
... another line
... 4th line''')
>>> buffer.readline()
'hi there\n'
>>> buffer.readlines()
['next line\n', 'another line\n', '4th line']
>>> buffer.seek(0)
>>> buffer.readlines()
['hi there\n', 'next line\n', 'another line\n', '4th line']发布于 2017-04-15 03:17:04
因为readlines读取了文件中的所有行,所以没有更多的行需要读取,所以要再次读取文件,可以使用f.seek(0)返回到开头并从那里读取。
发布于 2017-04-15 03:17:59
文件有一个字节偏移量,每当你读或写它们时,它就会更新。这将完成您最初预期的操作:
with open("file.txt") as f:
a = f.readlines()
f.seek(0) # seek to the beginning of the file
b = f.readline()现在a是所有行,而b只是第一行。
https://stackoverflow.com/questions/43417824
复制相似问题