获取csv文件的长度而不破坏读者?

Dav*_*542 4 python csv

我正在尝试执行以下操作:

reader = csv.DictReader(open(self.file_path), delimiter='|')
reader_length = sum([_ for item in reader])
for line in reader:
    print line
Run Code Online (Sandbox Code Playgroud)

然而,做这一reader_length行,使读者本身不可读.请注意,我不想list()在阅读器上执行操作,因为它太大而无法完全从内存中读取我的计算机.

Jor*_*ley 6

reader = list(csv.DictReader(open(self.file_path), delimiter='|'))
print len(reader)
Run Code Online (Sandbox Code Playgroud)

我认为这是一种方法

另一种方法是

reader = csv.DictReader(open(self.file_path), delimiter='|')
for i,row in enumerate(reader):
    ...
num_rows = i+1
Run Code Online (Sandbox Code Playgroud)

  • OP已经声明他不想在整个读者身上做一个`list()`. (2认同)

Pad*_*ham 6

使用枚举值为起始值1,当你到达文件末尾时,你将获得行数:

for count,line in enumerate(reader,1):
    # do work
print count
Run Code Online (Sandbox Code Playgroud)

或者,如果您因为某种原因需要使用生成器表达式求和,并寻找文件的开头:

  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)
Run Code Online (Sandbox Code Playgroud)