我有以下代码
with open('data.csv') as csvfile:
data = csv.reader(csvfile, delimiter=' ')
print(data)
row_count = row_count = sum(1 for lines in data)
print(row_count)
for row in data:
print(row)
它打印:
<_csv.reader object at 0x00000295CB6933C8>
505
因此它将data
打印为对象,并将row_count
打印为505。在for循环中似乎没有打印row
。我不确定为什么没有任何内容传递给变量行?
答案 0 :(得分:3)
data = csv.reader(csvfile, delimiter=' ')
print(data)
row_count = row_count = sum(1 for lines in data)
您只读取了整个文件;您已经用尽了所有输入。您剩下的第二个for
找不到任何东西。您必须重置阅读器。最明显的方法是关闭文件并重新打开。不太明显……灵活性较差……是使用
csvfile.seek(0)
这不适用于所有文件子类型,但适用于CSV。
更好的是,只需在打印时对行进行计数:
使用open('data.csv')作为csvfile: 数据= csv.reader(csvfile,delimiter ='')
row_count = 0
for row in data:
print(row)
row_count += 1
print(row_count)
答案 1 :(得分:2)
您已经通过设置的理解量消耗了数据中的行:
with open('data.csv') as csvfile:
data = csv.reader(csvfile, delimiter=' ')
print(data)
row_count = row_count = sum(1 for lines in data) # This consumes all of the rows
print(row_count)
for row in data: # no more rows at this point.
print(row) # doesn't run because there are no more rows left
如果要在打印每一行之前打印计数,则必须将所有行保存在内存中或创建第二个CSV阅读器对象。
答案 2 :(得分:1)
如果您有足够的存储空间,这可能是将数据放入列表并通过列表进行发送以节省所有麻烦的最佳解决方案
with open('your_csv.csv','r') as f_:
reader=csv.reader(f_)
new_list=list(reader)
for row in new_list:
print(row) #or whatever else you want to do afterwards