处理大文件需流式读取与增量计算:按行读取最稳妥,分块读取适用于无行结构文件,生成器封装提升复用性,结合csv.DictReader、itertools.islice、Welford算法等实现高效内存控制。
处理大文件时,不能一次性加载到内存,必须用流式读取配合增量计算。核心是“边读边算”,避免内存爆炸。
文件逐行读取是Python处理大文本的默认推荐方式,内存占用只与单行长度相关,不随文件总大小线性增长。
for line in open(...) 或更安全的 with open(...) as f: for line in f:
f.readlines() 或 f.read(),它们会把整个文件载入内存当文件没有换行分隔(如日志合并体、自定义二进制格式),或单行极长导致解析压力大,可用固定字节数分块读取。
f.read(chunk_size) 控制每次读取量,例如 chunk_size = 8192(8KB)把流式读取和业务解析打包成生成器函数,既节省内存,又让主流程干净清晰。
立即学习“Python免费学习笔记(深入)”;
parse_log_lines(filepath),yield 解析后的字典,而非原始字符串sum(1 for item in parse_log_lines("access.log") if item["status"] == 500) 统计错误数很多统计需求不需要全量数据驻留内存,用内置模块边读边更新状态即可。
csv.DictReader(f) 支持流式读 CSV,配合 for row in reader: 即可itertools.islice 取前N条做采样,不用读完整个文件
collections.Counter,但它本身会累积键值对——若唯一键过多,改用 defaultdict(int) 并设阈值丢弃低频项不复杂但容易忽略:打开大文件时加上 buffering=8192 或指定编码(如 encoding="utf-8"),能减少解码开销和IO等待。