为什么readline()在readlines()之后不起作用?

时间:2017-04-14 19:14:26

标签: python file readline readlines

在Python中,我说:

f = open("file.txt", "r")
    a = f.readlines()
    b = f.readline()
    print a
    print b

print a会显示文件的所有行,print b将不会显示任何内容。

反之亦然:

f = open("file.txt", "r")
    a = f.readline()
    b = f.readlines()
    print a
    print b

print a显示第一行,但print b将显示除第一行以外的所有行。

如果ab都是readlines(),则a会显示所有行,b将不会显示任何内容。

为什么会这样?为什么两个命令都不能相互独立工作?有解决方法吗?

3 个答案:

答案 0 :(得分:4)

因为首先执行.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']

答案 1 :(得分:2)

因为readlines读取了文件中的所有行,所以没有剩余的行可供读取,再次读取文件,您可以使用f.seek(0)返回到开头并从那里读取

答案 2 :(得分:1)

文件具有字节偏移量,只要您读取或写入它们就会更新。这将做你最初的预期:

a

现在b是所有行,而 if (search.getText().equals(sDisplayText)) { isNoRecordDisplayedMsg = true; } return isRecordHostDisplayedMsg; } 只是第一行。