0

0

Python怎么读取大文件_分块读取chunk_size与生成器应用

P粉602998670

P粉602998670

发布时间:2026-03-14 14:44:03

|

644人浏览过

|

来源于php中文网

原创

会。open()直接读大文件会因一次性加载全部内容导致MemoryError;应使用for line in f:按行迭代,或用f.read(chunk_size)分块读取,chunk_size推荐8KB–64KB。

python怎么读取大文件_分块读取chunk_size与生成器应用

open() 直接读大文件会崩内存?

会。哪怕只是 open('huge.log').read(),Python 也会把整个文件塞进内存——几 GB 的日志或 CSV 一读就 MemoryError。这不是 Python 慢,是它默认不帮你分块。

真正该做的是:用生成器控制每次只加载一小段,让内存占用稳定在几十 MB 内。

  • 别用 read()readlines() 一次性读完
  • 优先用 for line in f: —— 这是内置的按行迭代,底层已缓冲,够快也够省
  • 如果必须按字节块读(比如处理二进制、或行太长没换行符),才用 f.read(chunk_size)

chunk_size 设多大才合理?

不是越大越好,也不是越小越稳。设得太小(如 1 字节)会导致系统调用频繁,IO 效率暴跌;设得太大(如 100_000_000)又失去分块意义。

经验值是 8192(8KB)到 65536(64KB)之间。Linux 默认页大小是 4KB,多数磁盘/SSD 的块大小是 4–64KB,这个范围能对齐底层 IO 单元。

立即学习Python免费学习笔记(深入)”;

  • 文本文件按行处理?直接用 for line in f:,不用管 chunk_size
  • 需要精确控制字节量(比如解析自定义二进制协议)?chunk_size = 65536 是安全起点
  • 网络流或管道输入?chunk_size 建议 ≤ 4096,避免阻塞太久

写生成器函数时,yield 放哪儿容易出错?

常见错误是把 yield 放在 with open() 外面,或者在循环里 yield 了同一个可变对象(比如 list),结果所有 chunk 都指向最后一块数据。

闪念贝壳
闪念贝壳

闪念贝壳是一款AI 驱动的智能语音笔记,随时随地用语音记录你的每一个想法。

下载

关键点:每次 yield 的必须是独立副本,且文件句柄生命周期要可控。

  • 必须在 with open(...) 语句块内 yield,否则文件提前关闭
  • 别写 data = []; data.extend(chunk); yield data —— 应该 yield list(chunk)yield chunk.copy()
  • 如果处理文本并想按行切分,别自己 split('\n'),用 io.TextIOWrapper 的迭代行为更可靠

示例(安全的字节块生成器):

def read_in_chunks(file_path, chunk_size=65536):
    with open(file_path, 'rb') as f:
        while True:
            chunk = f.read(chunk_size)
            if not chunk:
                break
            yield chunk  # 注意:这里 yield 的是新 bytes 对象,每次都不一样

pandas.read_csv() 读大 CSV,chunksizeiterator 怎么配?

chunksize 不是“一次读多少行”,而是“返回一个可迭代的 TextFileReader 对象”;不设 iterator=Truechunksize 就无效。

真正生效的组合只有一种:pd.read_csv(..., chunksize=N) → 返回一个迭代器,每次 next()for 得到一个 DataFrame;设成 iterator=False(默认)就直接报错。

  • chunksize=1000 表示每次 yield 一个含约 1000 行的 DataFrame,不是 1000 字节
  • 列类型推断只在第一块做,后续 chunk 若有空值或类型不一致,可能报 TypeError —— 建议显式传 dtype
  • 如果文件带 BOM 或编码异常,encoding='utf-8-sig''utf-8' 更稳妥

分块读的本质不是“怎么读快”,是“不让内存被撑爆”。很多人卡在 chunk_size 数值上,其实更该先确认:你真需要手动分块?还是用 for line in f:pd.read_csv(chunksize=...) 就够了。手动管理 chunk,意味着你要对换行、编码、边界截断全负责——这点最容易被忽略。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

81

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

34

2026.01.31

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1564

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

716

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

300

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

801

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

588

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

570

2023.07.20

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号