python如何流式读取数G超大文件
这篇文章将为大家详细讲解有关python如何流式读取数G超大文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
如何流式读取数G超大文件
使用 with...open... 可以从一个文件中读取数据,这是所有 Python 开发者都非常熟悉的操作。
但是如果你使用不当,也会带来很大的麻烦。
比如当你使用了 read 函数,其实 Python 会将文件的内容一次性的全部载入内存中,如果文件有 10 个G甚至更多,那么你的电脑就要消耗的内存非常巨大。
#一次性读取withopen("big_file.txt","r")asfp:content=fp.read()
对于这个问题,你也许会想到使用 readline 去做一个生成器来逐行返回。
defread_from_file(filename):withopen(filename,"r")asfp:yieldfp.readline()
可如果这个文件内容就一行呢,一行就 10个G,其实你还是会一次性读取全部内容。
最优雅的解决方法是,在使用 read 方法时,指定每次只读取固定大小的内容,比如下面的代码中,每次只读取 8kb 返回。
defread_from_file(filename,block_size=1024*8):withopen(filename,"r")asfp:whileTrue:chunk=fp.read(block_size)ifnotchunk:breakyieldchunk
上面的代码,功能上已经没有问题了,但是代码看起来代码还是有些臃肿。
借助偏函数 和 iter 函数可以优化一下代码
fromfunctoolsimportpartialdefread_from_file(filename,block_size=1024*8):withopen(filename,"r")asfp:forchunkiniter(partial(fp.read,block_size),""):yieldchunk
关于“python如何流式读取数G超大文件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
相关文章
- Lightly IDE 快捷键:Python 开发者必学的效率提升操作
- GitHub Codespaces 模板配置:快速初始化项目环境的技巧
- Python 类型注解进阶:mypy 静态类型检查与 IDE 集成
- Python 3.12 模式匹配增强:结构分解与多分支逻辑简化实战
- Lightly IDE 快捷键定制:Python 开发者专属效率提升方案
- Python 装饰器高级用法:类装饰器与元类结合实践
- Python 生成器表达式优化:内存占用与迭代效率平衡技巧
- Python 类型注解深度:Protocol 协议与泛型类型约束实践
- Python 3.12 新特性解析:模式匹配增强与性能优化实战
- Lightly IDE 深度评测:轻量级 Python 开发工具是否适合团队协作?