>백엔드 개발 >파이썬 튜토리얼 >파일의 줄 수를 효율적으로 얻는 방법

파일의 줄 수를 효율적으로 얻는 방법

anonymity
anonymity원래의
2019-05-25 10:46:022782검색

간단한 방법:

파이썬에서 대용량 파일(수십만 줄)의 줄 수를 가져와야 합니다.

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass    return i + 1

파일의 줄 수를 효율적으로 얻는 방법

효과적인 방법(버퍼 읽기 전략):

먼저 실행 결과를 살펴보세요:

mapcount : 0.471799945831
simplecount : 0.634400033951
bufcount : 0.468800067902
opcount : 0.602999973297

그래서 Windows/Python2.6의 경우 버퍼 읽기 전략이 가장 빠른 것 같습니다.

코드는 다음과 같습니다:

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))

위 내용은 파일의 줄 수를 효율적으로 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.