2020年11月7日 / 60次阅读 / Last Modified 2020年11月7日
用python读超大文件,数十个G的那种,需要有一点技巧:
以上就是我个人总结的经验。
下面是我封装的一个读取超大文件的生成器(generator):
from functools import partial
def read_blocks(pathname, mode='r', block_size=1024**2):
if mode not in ('r', 'rb'):
raise ValueError('mode parameter error')
stopper = '' if mode=='r' else b''
with open(pathname, mode) as f:
for chunk in iter(partial(f.read, block_size), stopper):
yield chunk
read_blocks,生成器,默认的block_size=1M,这个参数用来控制使用多大的内存!mode in ('r', 'rb'),这样二进制文件的读取也支持了。这个函数用到了builtin的iter函数,和partial函数。
这个读取超大文件的生成器,瓶颈其实在读硬盘的环节,内存已经被控制住了。我测试了一个36G的超大文件,全部读完一遍,还是要花点时间,也就几分钟吧,如果再加上一些计算处理的代码,时间会稍微长一点点。
还有个细节要注意,读取出来的chunk,如果需要做查找的话,要注意边缘的情况,有可能你要查找字符串,被chunk了!
-- EOF --
本文链接:https://www.pynote.net/archives/2763
《如何读超大文件?》有1条留言
前一篇:memory_profiler初体验
后一篇:霍夫曼(Huffman)压缩编码算法
©Copyright 麦新杰 Since 2019 Python笔记
多线程快速读取超大文件呢.... [ ]