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:
唯有热爱方能抵御岁月漫长。