无法在csv DictReader中迭代超过

2024-05-16 01:02:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python(2.7.6)中,我试图从CSV文件的某些列中获取列表。给定CSV文件test.csv,其中包含以下内容:

COL_ONE,COL_TWO,COL_THREE
val_R1C1,val_R1C2,val_R1C3
val_R2C1,val_R2C2,val_R2C3
val_R3C1,val_R3C2,val_R3C3
val_R4C1,val_R4C2,val_R4C3

我希望下面的代码可以为我做到这一点:

^{pr2}$

不幸的是,当我打印col2和col3这两个列表时,第二个列表是空的。在

['val_R1C2', 'val_R2C2', 'val_R3C2', 'val_R4C2']
[]

此替代方案的结果相同:

reader = csv.DictReader(open("test.csv", "r"))
col2 = []
for c2 in reader:
    col2.append(c2['COL_TWO'])
col3 = []
for c3 in reader:
    col3.append(c3['COL_THREE'])

解决方法很简单:

col2 = []
col3 = []
for cval in reader:
    col2.append(cval['COL_TWO'])
    col3.append(cval['COL_THREE'])

在前面两个例子中,我得到了我预期的结果:

['val_R1C2', 'val_R2C2', 'val_R3C2', 'val_R4C2']
['val_R1C3', 'val_R2C3', 'val_R3C3', 'val_R4C3']

我希望你能帮助我理解我做错了什么。为什么我在这三个病例中没有得到相同的结果?在


Tags: csv列表forcolvalreadercol2col3
1条回答
网友
1楼 · 发布于 2024-05-16 01:02:53

在两次读取之间将基础文件倒带到0位置:

import csv

fh = open("test.csv", "r")
reader = csv.DictReader(fh)
next(reader) # skip header row
col2 = list(c2['COL_TWO'] for c2 in reader)
fh.seek(0)  ## <         - this is the point
next(reader) # skip header row
col3 = list(c3['COL_THREE'] for c3 in reader)

相关问题 更多 >