我创建了一个生成器,该生成器从一个大型CSV文件中读取每一行,并返回每一行:
def csv_reader(filename):
import csv
with open(filename) as f:
reader = csv.DictReader(f)
for line in reader:
yield dict(line)
filename = "output.csv"
generator = csv_reader(filename)
我知道如何迭代生成器并获得输出:
# Iterate Generator
for g in generator:
print(g)
这将打印字典。
但是,如何访问每个词典中每个键的值?以下内容未返回任何内容。
for g in generator:
print(g['user'])
这也不起作用:
>>> for g in generator:
... alist.append(g.keys())
... alist
...
>>> alist
[]
答案 0 :(得分:1)
好像您正在迭代一个空的生成器。
我的意思是,一旦迭代了生成器一次,它就会被清空,而再次对其进行迭代将无济于事:
>>> def some_generator():
... yield 1
... yield 2
... yield 3
...
>>> generator = some_generator()
>>> for g in generator:
... print(g)
...
1
2
3
>>> for g in generator:
... print(g)
...
有两种解决方法:要么将生成器结果存储在列表中,以便您可以多次迭代列表(消耗内存),要么重新创建生成器(在读取文件时消耗I / O)。
所以:
>>> for g in some_generator():
... print(g)
...
1
2
3
>>> for g in some_generator():
... print(g)
...
1
2
3
或:
>>> values = list(some_generator())
>>> for g in values:
... print(g)
...
1
2
3
>>> for g in values:
... print(g)
...
1
2
3