2016-02-12 68 views
1

我在这里有点头痛。我是新来的在Python中使用CSV,但这里是我得到的:由airodump生成的CSV(这是一个艺术项目/技术演示,我试图计算特定区域中BSSID的数量)。我正在使用Python 3.4并尝试读取文件。我有一些空值的呃逆,但我似乎已经解决了这个问题(因此我打开文件的方式可能很奇怪)。在Python中使用棘手的文件读取CSV行

import csv 
print ("nibbler starting") 
log_initial = open("test.csv", "rU") 
logReader = csv.reader((line.replace('\0',' ') for line in log_initial), delimiter=",") 
logData = list(logReader) 
row_count1 = sum(1 for row in logData) 
row_count2 = sum(1 for row in logReader) 
print ('Rows = ' + str(row_count1)) 
print ('Rows = ' + str(row_count2)) 
for row in logReader: 
     print('Row #'+ str(logReader.line_num)+' '+str(row)) 

这就是发生了什么事。第一行打印说有52行(正确!),第二行打印说是0行(哦不,这不是我所期望的)。

然后,for循环没有提供任何东西。如果我在循环中用logData替换logReader,那么我会逐行列出整个文件。我会坚持将数据作为一个列表,但这限制了我可以用它做什么。

所以不知何故文件没有得到正确处理作为CSV。我不确定该怎么做。有任何想法吗?

+2

'logData = list(logReader)'它读取'logReader'中的所有行。由于迭代器(读者对象)已经耗尽,再次读取'logReader'将不会产生任何行。 –

+0

哇,谢谢。做到了!我知道这是完全愚蠢的事情。 –

+0

如果您将其编辑为答案,我可以给您信用并标记为已回答。 –

回答

0
logData = list(logReader) 

读取logReader中的所有行。读取logReader再次将不会产生行,因为迭代器(读者对象)已经耗尽。