Heim >Backend-Entwicklung >Python-Tutorial >So ermitteln Sie effizient die Anzahl der Zeilen in einer Datei
Einfache Methode:
Es muss die Anzahl der Zeilen einer großen Datei (Hunderttausende Zeilen) in Python ermittelt werden.
def file_len(fname): with open(fname) as f: for i, l in enumerate(f): pass return i + 1
Effektive Methode (Pufferlesestrategie):
Erster Blick auf das laufende Ergebnis:
mapcount : 0.471799945831 simplecount : 0.634400033951 bufcount : 0.468800067902 opcount : 0.602999973297
Die Pufferlesestrategie scheint also für Windows/Python2.6 die schnellste zu sein.
Hier ist der Code:
from __future__ import with_statement import time import mmap import random from collections import defaultdict def mapcount(filename): f = open(filename, "r+") buf = mmap.mmap(f.fileno(), 0) lines = 0 readline = buf.readline while readline(): lines += 1 return lines def simplecount(filename): lines = 0 for line in open(filename): lines += 1 return lines def bufcount(filename): f = open(filename) lines = 0 buf_size = 1024 * 1024 read_f = f.read # loop optimization buf = read_f(buf_size) while buf: lines += buf.count('\n') buf = read_f(buf_size) return lines def opcount(fname): with open(fname) as f: for i, l in enumerate(f): pass return i + 1 counts = defaultdict(list) for i in range(5): for func in [mapcount, simplecount, bufcount, opcount]: start_time = time.time() assert func("big_file.txt") == 1209138 counts[func].append(time.time() - start_time) for key, vals in counts.items(): print key.__name__, ":", sum(vals) / float(len(vals))
Das obige ist der detaillierte Inhalt vonSo ermitteln Sie effizient die Anzahl der Zeilen in einer Datei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!