读大文件应分块读、边读边处理以控制内存:按行读适合文本,用for line in f;分块读适合二进制,用f.read(chunk_size);mmap适合随机访问;生成器封装提升复用性;注意及时关闭文件、清理对象并监控内存。
读大文件时别一次性 read(),内存会爆。核心思路是“分块读、边读边处理”,让内存占用稳定在可控范围。
用 for line in f: 最省内存,Python 内部做了缓冲优化,不会把整文件加载进内存。
encoding 指定编码,避免解码错误)f.readline(max_bytes) 限制单行长度continue 或 break,不额外存中间数据用 f.read(chunk_size) 手动控制每次读多少字节,典型 chunk_size 取 8192(8KB)到 65536(64KB)之间较均衡。
chunk = None),帮助 GC 回收mmap 把文件“映射”成内存地址空间,操作系统按需加载页,不占 Python 堆内存。
r+ 或 copy_on_write 配置)list() 或 str() 全转,会触发全加载把读取+解析逻辑封装成生成器函数,调用方按需迭代,语义清晰且天然流式。
def read_csv_chunks(path, chunk_size=1000): 每次 yield 一个 DataFrame 分块csv.reader 配合 itertools.islice 控制行数,比 pandas 的 chunksize 更轻量不复杂但容易忽略:关闭文件、及时 del 大对象、监控 psutil.Process().memory_info().rss 看实际内存走势,比理论更可靠。