Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在不破坏阅读器的情况下获取csv文件的长度?_Python_Csv - Fatal编程技术网

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()