重置 csv.reader() 迭代器

Poo*_*pta 4 python csv

我试图使用 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)
Run Code Online (Sandbox Code Playgroud)

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

id,price,name x,y,z a,b,c 并按以下格式重新排列 id:xa 价格: yb 名称: zc 不使用 pandas 库

Sha*_*ger 7

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

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

请注意,如果内存不是问题,将输入读入 a list,然后迭代list两次通常会更快。或者,您可以使用itertools.tee初始迭代器创建两个迭代器(如果您在启动另一个迭代器之前完全迭代一个迭代器,则需要类似的内存,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:
    ...
Run Code Online (Sandbox Code Playgroud)