Heim  >  Artikel  >  Backend-Entwicklung  >  So ermitteln Sie effizient die Anzahl der Zeilen in einer Datei

So ermitteln Sie effizient die Anzahl der Zeilen in einer Datei

anonymity
anonymityOriginal
2019-05-25 10:46:022691Durchsuche

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

So ermitteln Sie effizient die Anzahl der Zeilen in einer Datei

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn