python高效计算大文件的行数方法

将较大的文件加载进入内存再计算行数时,可能会出现如下内存错误:

MemoryError: Unable to allocate 128. KiB for an array with shape (16384,) and data type float64

因此我们可以一块一块的读取大文件并进行计数,可以一行一行的读取文件并将结果相加得到行数:

def readline_count(file_name):
    return len(open(file_name).readlines())

但是这样做效率会比较低下,因此我们可以每次读取固定的大小并计数来提高效率:

def iter_count(file_name):
    from itertools import (takewhile, repeat)
    buffer = 1024 * 1024
    with open(file_name) as f:
        buf_gen = takewhile(lambda x: x, (f.read(buffer) for _ in repeat(None)))
        return sum(buf.count('\n') for buf in buf_gen)

在读文件出现如下错误时:

UnicodeDecodeError: 'gbk' codec can't decode byte

可以在读取文件时修改编码方式:

with open(file_name, encoding='utf-8') as f:

 

posted @ 2023-01-11 16:23  做个读书人  阅读(329)  评论(0编辑  收藏  举报