在研究一个经常被问到的问题(如何在迭代之前找到CSV阅读器中的行数)的选项时,我遇到了使用len(list(myCSVReader))
的方法。是的,我知道这有多糟糕,而且可能很贵,我不会用它的。但在玩的时候,我遇到了一个令人费解的矛盾:
#myFile.txt is a 3-line CSV file
myCSV = csv.reader(open('myFile.txt','rb'),dialect='excel')
print(len(list(myCSV)))
print(list(myCSV))
当我运行这个程序时,我得到:
^{pr2}$我可以理解为什么不能使用list()
将读取器转换为列表列表,但是如果是这样,那么len()
如何/为什么会产生正确的结果?在
——JDM公司
这是从
generator
构建list
时发生的情况。在Generator是一个iterable对象,可以逐个生成项。在某种程度上,它已经耗尽了。
csv.reader
返回生成器。执行
list(generator)
操作时,列表构造函数将使用生成器中的所有项。下一次你尝试从生成器中获取一些东西时(例如,下次再做),它已经用完了。
你能做的是 创建一次列表并在需要时使用:
相关问题 更多 >
编程相关推荐