python流式读取大文件的两种方法

来源:千锋教育
发布时间:2023-11-13 02:12:36
分享

python流式读取大文件的两种方法

1、使用read方法分块读取

使用更底层的file.read()方法,与直接循环迭代文件对象不同,每次调用file.read(chunk_size)会直接返回从当前位置往后读取chunk_size大小的文件内容,不必等待任何换行符出现。

defcount_nine_v2(fname):

"""计算文件里包含多少个数字'9',每次读取8kb

"""

count=0

block_size=1024*8

withopen(fname)asfp:

whileTrue:

chunk=fp.read(block_size)

#当文件没有更多内容时,read调用将会返回空字符串''

ifnotchunk:

break

count+=chunk.count('9')

returncount

2、利用生成器解耦代码

可以定义一个新的chunked_file_reader生成器函数,由它来负责所有与“数据生成”相关的逻辑。

count_nine_v3里面的主循环就只需要负责计数即可。

defchunked_file_reader(fp,block_size=1024*8):

"""生成器函数:分块读取文件内容

"""

whileTrue:

chunk=fp.read(block_size)

#当文件没有更多内容时,read调用将会返回空字符串''

ifnotchunk:

break

yieldchunk

defcount_nine_v3(fname):

count=0

withopen(fname)asfp:

forchunkinchunked_file_reader(fp):

count+=chunk.count('9')

returncount

使用iter(callable,sentinel)的方式调用它时,会返回一个特殊的对象,迭代它将不断产生可调用对象callable的调用结果,直到结果为setinel时,迭代终止。

defchunked_file_reader(file,block_size=1024*8):

"""生成器函数:分块读取文件内容,使用iter函数

"""

#首先使用partial(fp.read,block_size)构造一个新的无需参数的函数

#循环将不断返回fp.read(block_size)调用结果,直到其为''时终止

forchunkiniter(partial(file.read,block_size),''):

yieldchunk

以上就是Python流式读取大文件的两种方法,更多Python学习教程请关注IT培训机构:千锋教育。

声明:本站部分稿件版权来源于网络,如有侵犯版权,请及时联系我们。

相关推荐

  • python制表符添加空白有哪些方法? python制表符添加空白有哪些方法?在编程中,空白指的是空格、表格、换行符等非印刷文字。可以使用空白组织输出,使输出更容易阅读。1、在字符串中添加制表符,可使用字符组合\t,如下代码所示:print
  • 如何在Python中生成ndarray 如何在Python中生成ndarray生成ndarray最简单的方法就是array函数,array函数接受任意的序列型对象,生成一个新的包含传递数据的NumPy数组。例子如下:importnumpya
  • Python中NumPy的基本概念 python中NumPy的基本概念ndarray是一种高效多维数组,提供了基于数组的便捷算术操作以及灵活的广播功能,如下我们可以快速生成一个2*3的数组。importnumpyasnpdata=np.
  • python如何将相对路径转换为绝对路径? python如何将相对路径转换为绝对路径?一、相对路径与绝对路径1、参数是绝对路径,返回True>>>os.path.isabs('.')False2、参数是相对路径,返回False>
  • python绝对和相对导入的介绍 python绝对和相对导入的介绍自Python3开始,所有导入都默认为绝对导入,它将首先查找系统包。1、概念但是如果你的软件包有一个名为sys的模块,并且你想把它导入到同一个包内的另一个模块中,你必须
  • python包初始化有什么好处? python中包初始化有什么好处?除了标识一个包,__init__.py还有一个目的-包初始化。这就是为什么它被称为init!初始化是在包导入时触发的,换句话说,导入包时调用__init__.py。当