gpt4 book ai didi

python - 重置 csv.reader() 迭代器

转载 作者:行者123 更新时间:2023-11-28 22:32:23 26 4
gpt4 key购买 nike

我试图使用 csv 阅读器进行一些 csv 处理,但遇到了一个问题,我必须迭代 csv 阅读器读取的行。但是在第二次迭代时,它返回 nil 因为所有的行都已经被迭代了,有什么办法可以刷新迭代器以再次从头开始。

代码:

desc=open("example.csv","r")

Reader1=csv.read(desc)

for lines in Reader1:
(Some code)

for lines in Reader1:
(some code)

正是想要做的是读取下面格式的csv文件

id,价格,名称x,y,z一个,乙,丙并按以下格式重新排列编号:xa价格:yb姓名:zc不使用 Pandas 库

最佳答案

使用 seek 重置底层文件对象,在第二个循环之前添加以下内容:

desc.seek(0)
# Apparently, csv.reader will not refresh if the file is seeked to 0,
# so recreate it
Reader1 = csv.reader(desc)

请注意,如果内存不是问题,将输入读入 list,然后迭代 list 两次通常会更快。或者,您可以 use itertools.tee从初始迭代器生成两个迭代器(如果您在启动另一个迭代器之前完全迭代一个迭代器,则它需要与 slurping to list 类似的内存,但允许您立即开始迭代,而不是等待整个文件在你可以处理任何它之前阅读)。这两种方法都避免了重复文件两次所需的额外系统调用。 tee 方法,在您创建 Reader1 的行之后:

# It's not safe to reuse the argument to tee, so we replace it with one of
# the results of tee
Reader1, Reader2 = itertools.tee(Reader1)

for line in Reader1:
...

for line in Reader2:
...

关于python - 重置 csv.reader() 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984797/

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