首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么readline()在readline()之后不能工作?

为什么readline()在readline()之后不能工作?
EN

Stack Overflow用户
提问于 2017-04-15 03:14:26
回答 3查看 1.4K关注 0票数 1

在Python中,假设我有:

代码语言:javascript
复制
f = open("file.txt", "r")
    a = f.readlines()
    b = f.readline()
    print a
    print b

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

反之亦然:

代码语言:javascript
复制
f = open("file.txt", "r")
    a = f.readline()
    b = f.readlines()
    print a
    print b

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

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

这一切为什么要发生?为什么这两个命令不能相互独立地工作?有解决这个问题的办法吗?

EN

回答 3

Stack Overflow用户

发布于 2017-04-15 03:15:33

因为首先执行.readlines()将消耗所有的读缓冲区,而不会留下任何可供.readline()从中获取的内容。如果你想回到开始,使用.seek(0)作为@abccd已经在他的回答中提到。

代码语言:javascript
复制
>>> 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']
票数 4
EN

Stack Overflow用户

发布于 2017-04-15 03:17:04

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

票数 3
EN

Stack Overflow用户

发布于 2017-04-15 03:17:59

文件有一个字节偏移量,每当你读或写它们时,它就会更新。这将完成您最初预期的操作:

代码语言:javascript
复制
with open("file.txt") as f:
    a = f.readlines()
    f.seek(0)  # seek to the beginning of the file
    b = f.readline()

现在a是所有行,而b只是第一行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43417824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档