Existe alguma maneira interna de obter o comprimento de um iterável em python?
Por exemplo, os arquivos no Python são iteráveis - eles repetem as linhas do arquivo. Eu quero contar o número de linhas.
Uma maneira rápida é fazer isso:
lines = len(list(open(fname)))
No entanto, isso carrega o arquivo inteiro na memória (de uma só vez). Isso acaba com o objetivo de um iterador (que só precisa manter a linha atual na memória).
Isso não funciona:
lines = len(line for line in open(fname))
como geradores não têm um comprimento.
Existe alguma maneira de fazer isso sem definir uma função de contagem?
def count(i):
c = 0
for el in i: c += 1
return c
EDIT: Para esclarecer, entendo que o arquivo inteiro terá que ser lido! Eu só não quero isso na memória de uma só vez =).