for index, line in enumerate(f.readlines()) 之后, f.readlines() 为什么会被清空了?

2020-04-06 12:57:02 +08:00
 miniyao

文档打开之后,f = open('doc.txt', 'r') 通过 enumerate() 枚举,发现 f.readlines() 变成空列表 [] 啦?这是什么原因?

f = open('doc.txt', 'r')
for index, line in enumerate(f.readlines()):
    print(index, line)
    print(f.readlines())
f.close()

print(f.readlines()) 打印出来是空列表 []

2225 次点击
所在节点    Python
4 条回复
felix021
2020-04-06 12:59:45 +08:00
f.readlines() 读取了文件的所有内容,这时候文件的读指针已经在末尾了。
jmc891205
2020-04-06 13:51:14 +08:00
因为你调用过 readlines 之后 the stream position 已经在文件末尾了
所以你再调用 readlines 就读不到任何东西了


要么你先用一个变量把 readlines 的返回值存一下
要么你在第二次调用 readlines 之前调用一下 seek
aloxaf
2020-04-06 22:58:53 +08:00
题外话:这里直接 enumerate(f) 即可,.readlines() 多此一举(
Kobayashi
2020-04-07 00:03:47 +08:00
f.seek(0)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/659800

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX