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

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

 

码:

 

Copydesc=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
A,B,C
并按以下格式重新排列
id:x a
价格:y b
名称:z c
没有使用熊猫库

最佳答案

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

 

 

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

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

 

Copy# 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:
    ...
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值