Python 在不破坏阅读器的情况下获取csv文件的长度?
我正在努力做到以下几点:Python 在不破坏阅读器的情况下获取csv文件的长度?,python,csv,Python,Csv,我正在努力做到以下几点: reader = csv.DictReader(open(self.file_path), delimiter='|') reader_length = sum([_ for item in reader]) for line in reader: print line 但是,执行reader\u length行会使读取器本身无法读取。请注意,我不想在读卡器上执行list(),因为它太大,无法在我的机器上完全从内存读取 reader = list(csv.Di
reader = csv.DictReader(open(self.file_path), delimiter='|')
reader_length = sum([_ for item in reader])
for line in reader:
print line
但是,执行reader\u length
行会使读取器本身无法读取。请注意,我不想在读卡器上执行list()
,因为它太大,无法在我的机器上完全从内存读取
reader = list(csv.DictReader(open(self.file_path), delimiter='|'))
print len(reader)
我想这是一种方法
另一种方法是
reader = csv.DictReader(open(self.file_path), delimiter='|')
for i,row in enumerate(reader):
...
num_rows = i+1
使用开始值为
1
的enumerate,当到达文件末尾时,将有行计数:
for count,line in enumerate(reader,1):
# do work
print count
或者,如果出于某种原因需要在开始时使用生成器表达式求和计数,并返回到文件的开始处:
with open(self.file_path) as f:
reader = csv.DictReader(f, delimiter='|')
count = sum(1 for _ in reader)
f.seek(0)
reader = csv.DictReader(f, delimiter='|')
for line in reader:
print(line)
[[uufor item in reader]
正在整个阅读器上创建一个列表()
。我明白了——那我该怎么处理呢?在不破坏读者的情况下,我如何计算它——或者这是不可能的?我想我可以数一数文件中的结束字符数吗?你基本上要把整个文件读两遍。在一次进入for循环时对其进行计数,或者关闭文件并再次打开以重置读卡器。OP已经声明他不想对整个读卡器执行list()
。