Python 连续打印两次DictReader列表会产生不同的结果

Python 连续打印两次DictReader列表会产生不同的结果,python,csv,Python,Csv,我正在使用csv模块使用csv.DictReader读取csv文件。我是Python的新手,下面的行为让我感到困惑 编辑:见后面的原始问题 csv = csv.DictReader(csvFile) print(list(csv)) # prints what I would expect, a sequence of OrderedDict's print(list(csv)) # prints an empty list... list是否以某种方式变异了csv 原始问题: removeF

我正在使用
csv
模块使用
csv.DictReader
读取csv文件。我是Python的新手,下面的行为让我感到困惑

编辑:见后面的原始问题

csv = csv.DictReader(csvFile)
print(list(csv)) # prints what I would expect, a sequence of OrderedDict's
print(list(csv)) # prints an empty list...
list
是否以某种方式变异了
csv

原始问题:


removeFooColumn
函数中的序列发生了什么变化?

csv。DictReader
是一个生成器迭代器,只能使用一次。这里有一个修正:

def removeFooColumn(csv):
  for row in csv:
    del row['Foo']

csv = list(csv.DictReader(csvFile))
print(csv) # prints what I would expect, a sequence of OrderedDict's
removeFooColumn(csv)
print(csv) # prints an empty list...

如果不调用
removeFooColum(csv)
,会发生什么?@Heap Overflow…我想我现在明白了…如果我注释掉调用
removeFooColumn
,结果是一样的@Omer我已经验证了
del csv['Foo']
在迭代中只从dict中删除一列,而不删除整行。您是否使用过pandas库?取决于您在这个特定操作之外所做的工作,它可能会使事情变得更简单。@LTheriault,我考虑过它,但鉴于我是Python新手,在深入研究任何非标准库之前,我想了解一下Python是如何工作的。嗯,这是可行的,但我不明白为什么。我在文档中找不到任何地方提到
csv.DictReader
是一个“生成器”。你是怎么发现的?我在文件里也找不到这方面的任何提及。我是根据Python在生成器方面的一般经验发现的……好的。找到了。它说,
DictReader
“创建一个像常规
读取器一样运行的对象。”。
读取器
被记录为“返回一个迭代行的
读取器
对象”。迭代器的定义如下:。我的意思是说,
csv.DictReader
是一个迭代器,而不是生成器,我混淆了两个不同的术语。生成器返回一个
生成器迭代器
。感谢您的关注!肯定是在挠我的头……:)
def removeFooColumn(csv):
  for row in csv:
    del row['Foo']

csv = list(csv.DictReader(csvFile))
print(csv) # prints what I would expect, a sequence of OrderedDict's
removeFooColumn(csv)
print(csv) # prints an empty list...