关键在分块读取:按行(for line in file)、按字节(file.read(chunk_size))、pandas分块(chunksize参数)及生成器封装,可稳定处理gb级文件。

大文件读取卡顿、内存爆满?关键不在“读”,而在“怎么读”。Python默认一次性加载整个文件到内存,遇到GB级日志、CSV或文本文件极易崩溃。真正有效的解法是分块读取——按需加载、边读边处理,内存占用稳定可控。
按行分块:适合纯文本和日志类文件
对逐行处理的场景(如过滤日志、提取字段),用 for line in file 最轻量,Python底层已做缓冲优化,不占额外内存:
- 直接打开文件,不调用 readlines() 或 read(),避免整文件载入
- 每轮只保留当前行字符串,处理完即被回收
- 示例:统计含 "ERROR" 的行数,10GB日志也能跑得稳
按字节分块:精确控内存,适配任意二进制/文本
当需自定义块大小(如每次读 8MB),或处理非行结构数据(如二进制流、固定长度记录),用 file.read(chunk_size):
- 设定 chunk_size = 8 * 1024 * 1024(8MB),平衡IO效率与内存压力
- 注意:文本文件中可能切在行中间,需手动拼接断行(缓存末尾不完整行)
- 二进制文件无此问题,可直接解析块内结构
用 pandas 分块读 CSV:兼顾易用与性能
处理大型CSV时,pandas.read_csv() 的 chunksize 参数是最佳折中方案:
乐彼多用户商城系统,采用ASP.NET分层技术和AJAX技术,运营于高速稳定的微软.NET+MSSQL 2005平台;完全具备搭建超大型网络购物多用户网上商城的整体技术框架和应用层次LBMall 秉承乐彼软件优秀品质,后台人性化设计,管理窗口识别客户端分辨率自动调整,独立配置的菜单操作锁,使管理操作简单便捷。待办事项1、新订单、支付、付款、短信提醒2、每5分钟自动读取3、新事项声音提醒 店铺管理1
立即学习“Python免费学习笔记(深入)”;
- 设置 chunksize=50000,返回可迭代的 DataFrame 对象,每块约5万行
- 支持列筛选(usecols)、类型预设(dtype)进一步减内存
- 避免用 df = pd.read_csv(...) 一次性加载,尤其字段多、有object类型时
进阶技巧:配合生成器与迭代器释放压力
把分块逻辑封装成生成器,让业务代码更清晰、资源更可控:
- 写一个 read_in_chunks(filename, chunk_size=8192),yield 每一块内容
- 用 for chunk in read_in_chunks(...) 迭代处理,无需管理文件指针或缓存
- 结合 contextlib.closing 或 with 语句确保文件及时关闭
分块不是权宜之计,而是大文件处理的标准姿势。选对方式,千兆文件也能像读小文件一样顺滑。









