Ich muss eine Zeilenzahl einer großen Datei (Hunderttausende von Zeilen) in Python erhalten. Was ist die effizienteste Art und Weise sowohl Speicher- und Zeit-weise?
Im Moment tue ich:
def file_len(fname):
with open(fname) as f:
for i, l in enumerate(f):
pass
return i + 1
Ist es möglich, etwas besser zu machen?
Besser kann man es nicht machen.
Schließlich muss jede Lösung die gesamte Datei lesen, herausfinden, wie viele "n" Sie haben, und dieses Ergebnis zurückgeben.
Haben Sie eine bessere Möglichkeit, das zu tun, ohne die gesamte Datei zu lesen? Nicht sicher... Die beste Lösung wird immer I/O-gebunden sein, das Beste, was Sie tun können, ist sicherzustellen, dass Sie keinen unnötigen Speicher verwenden, aber es sieht so aus, als hätten Sie das im Griff.
Sie könnten einen Unterprozess starten und wc -l filename
ausführen
import subprocess
def file_len(fname):
p = subprocess.Popen(['wc', '-l', fname], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
result, err = p.communicate()
if p.returncode != 0:
raise IOError(err)
return int(result.strip().split()[0])