gpt4 book ai didi

python - 为什么我只能使用一次阅读器对象?

转载 作者:行者123 更新时间:2023-11-28 20:48:11 25 4
gpt4 key购买 nike

我正在尝试使用 csv 模块将一列数字读入 python。我得到以下行为:

import csv

f=open('myfile.txt','r')
reader=csv.reader(f)
print [x for x in reader] # This outputs the contents of "myfile.txt",
# broken up by line.
print [x for x in reader] # This line prints an empty list.

为什么会这样? reader 对象只能使用一次有什么原因吗?

最佳答案

同样的原因:

>>> li=[1,2,3,4,5,6,7,8,9]
>>> it=iter(li)
>>> print [x for x in it], [x for x in it]
[1, 2, 3, 4, 5, 6, 7, 8, 9], []

注意空列表...

csv.reader 是一个 iterator从容器或序列中一个接一个地生成项目,直到 StopIteration exception 表示没有更多的项目。

对于内置类型(以及我所知道的所有库类型,如 csv),迭代是一种方法,“返回”的唯一方法是保留您感兴趣的项目或重新创建迭代器。

我想你可以通过向后查找来破解/欺骗 csv.reader,但为什么要这样做呢?

如果需要,您可以复制迭代器:

>>> it_copy=list(it)
>>> print [x for x in it_copy],[x for x in it_copy]
[1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9]

或者使用itertools.tee正如 Mark Ransom 所指出的那样。

最好的方法是围绕通过迭代器的单向旅行来设计您的算法。更少的内存,通常更快。

关于python - 为什么我只能使用一次阅读器对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com