在CSV读取中使用list()函数不一致

2024-10-01 02:32:57 发布

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

在研究一个经常被问到的问题(如何在迭代之前找到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公司


Tags: csv方法txt列表lenis选项line
1条回答
网友
1楼 · 发布于 2024-10-01 02:32:57

这是从generator构建list时发生的情况。在

  • Generator是一个iterable对象,可以逐个生成项。在某种程度上,它已经耗尽了。

  • csv.reader返回生成器。

  • 执行list(generator)操作时,列表构造函数将使用生成器中的所有项。

  • 下一次你尝试从生成器中获取一些东西时(例如,下次再做),它已经用完了。

你能做的是 创建一次列表并在需要时使用:

myCSV = list(csv.reader(open('myFile.txt','rb'),dialect='excel'))
print(len(myCSV))
print(myCSV)

相关问题 更多 >