温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python如何流式读取数G超大文件

发布时间:2022-03-16 15:01:48 来源:亿速云 阅读:549 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关python如何流式读取数G超大文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

如何流式读取数G超大文件

使用 with...open... 可以从一个文件中读取数据,这是所有 Python 开发者都非常熟悉的操作。

但是如果你使用不当,也会带来很大的麻烦。

比如当你使用了 read 函数,其实 Python 会将文件的内容一次性的全部载入内存中,如果文件有 10  个G甚至更多,那么你的电脑就要消耗的内存非常巨大。

# 一次性读取 with open("big_file.txt", "r") as fp:     content = fp.read()

对于这个问题,你也许会想到使用 readline 去做一个生成器来逐行返回。

def read_from_file(filename):     with open(filename, "r") as fp:         yield fp.readline()

可如果这个文件内容就一行呢,一行就 10个G,其实你还是会一次性读取全部内容。

最优雅的解决方法是,在使用 read 方法时,指定每次只读取固定大小的内容,比如下面的代码中,每次只读取 8kb 返回。

def read_from_file(filename, block_size = 1024 * 8):     with open(filename, "r") as fp:         while True:             chunk = fp.read(block_size)             if not chunk:                 break              yield chunk

上面的代码,功能上已经没有问题了,但是代码看起来代码还是有些臃肿。

借助偏函数 和 iter 函数可以优化一下代码

from functools import partial  def read_from_file(filename, block_size = 1024 * 8):     with open(filename, "r") as fp:         for chunk in iter(partial(fp.read, block_size), ""):             yield chunk

关于“python如何流式读取数G超大文件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI