Python 2.6如何重复列入对象的DictReader对象?

时间:2014-11-14 21:04:42

标签: python list csv

Python 2.6(作业所必需的)

import csv

list = ['apple,whiskey,turtle', 'orange,gin,wolf', 'banana,vodka,sparrow']
fieldNames = ['Fruit', 'Spirit', 'Animal']
reader = csv.DictReader(list,fieldnames= fieldNames)

for row in reader:
    print row['Fruit']

for row in reader:
    print row['Fruit']

我有一些代码可以生成每行的统一项目列表,从而生成一个列表对象。为了便于使用,我使用了csv模块的DictReader来遍历行并进行我需要的任何计算,但是当我尝试第二次迭代时,我没有输出。我怀疑列表的结尾被视为EOF,但我无法寻找'到列表的开头再次进行迭代。

关于我能做什么的任何建议?也许有比使用CSV更好的方法,它看起来真的很方便。

新代码

import csv

list = ['apple,"whiskey,rum",turtle', 'orange,gin,wolf', 'banana,vodka,sparrow']
processed = []
fieldNames = ['Fruit', 'Spirit', 'Animal']
reader = csv.DictReader(list,fieldnames= fieldNames, quoatechar = '"')

for row in reader:
    processed.append(row)
    print row

for row in processed:
    print row['Fruit']

for row in processed:
    print row['Spirit']

@jonrsharpe建议将阅读器行放入列表中。它完全符合我的想法。谢谢大家。

1 个答案:

答案 0 :(得分:1)

你确实是正确的,迭代行一次是DictReader提供的。所以你的选择是:

  • 创建一个新的DictReader并再次迭代(似乎很浪费)
  • 遍历行一次并执行您要执行的所有计算
  • 对行进行一次迭代,将数据存储在另一个数据结构中,并根据需要多次迭代该数据结构。

此外,如果您只有列表和字段名称,则不需要DictReader来执行相同的操作。如果您知道数据相对简单(例如数据中没有逗号和所有相同数量的项目),那么您可以简单地执行:

merged = [zip(fieldnames, row.split(",")) for row in my_list]
print merged