Python使用open函数的buffering设置文件缓冲方式

 更新时间:2024年02月10日 10:03:29   作者:AllardZhao  
这篇文章主要介绍了Python使用open函数的buffering设置文件缓冲方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

如何设置文件的缓冲

实际案例

将文件内容写到硬件设备时,使用系统调用,这类I/O操作的时间很长。

为了减少I/O操作的次数,文件通常使用缓冲区。

(有足够多的数据才进行系统调用)文件的缓冲行为,分为全缓冲、行缓冲、无缓冲。

如何设置python中文件对象的缓冲行为?

python文件对象默认的缓冲行为4个字节(4096)

解决方案

  • 全缓冲:open函数的buffering设置为大于1的整数n,n为缓冲区大小。
  • 行缓冲:open函数的buffering设置为1 。
  • 无缓冲:pen函数的buffering设置为0。

注意:

都是在python交互模式下进行的操作,如果是用脚本,脚本运行完关闭文件对象,缓冲区内容就会写到磁盘中,这样就观察不了缓冲区不同大小的行为了。

文件缓冲介绍?

对于磁盘这类的块设备,它的读写不是一个字节一个字节完成的,而是按块每次读写一个块,假设一个块的大小是4096个字节,那就意味着写入一个字节和写入4096个字节都需要一次I/O操作,它们的用时是相同的。

在这种情况为了提高效率就要减少I/O操作的次数,使用的手段就是为文件设立一个缓冲区。

当需要写入的字节数不足一个块设备大小的时候,那么都放入缓冲区当中,凑够一个块的大小才调用一次系统调用。

  • 全缓冲就是缓冲区有一定大小满足那个数量就进行一次系统调用;
  • 行缓冲就是碰到一个换行符就进行一次输出也就是一次系统调用;
  • 无缓冲就是不希望有缓冲的实时写入到文件,如串口设备,需要及时的发送到串口上去。

代码演示

f = open('open.txt', 'wb')
'''
使用tail -f open.txt,实时查看文件内容,
python交互模式下,输入以下内容,查看写入4096个字节前后输出变化。
'''
f.write(b'abc')
f.write(b'+' * 4093)
f.write(b'-')
'''
普通文件默认的缓冲行为,缓冲区的大小4096,是根据平台和
块设备自身的属性相关。在某些情况下想改变缓冲区的大小应该怎么做?
通过open函数buffering参数设置缓冲大小。
'''
# 设置全缓冲区的大小为2048
f2 = open('demo2.txt', 'wb', buffering=2048)
f2.write(b'+' * 1024)
f2.write(b'+' * 1023)
f2.write(b'-' * 2)
 
# 设置行缓冲,buffering为1
f3 = open('demo3.txt', 'wb', buffering=1)
f.write(b'abc')
f.write(b'123')
f.write(b'\n')
 
# 无缓冲,buffering为0
f4 = open('demo4.txt', 'wb', buffering=0)
f4.write(b'a')
f4.write(b'1234')

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Python开发一个PDF文本提取工具

    使用Python开发一个PDF文本提取工具

    在日常工作中,我们经常需要从PDF文档中提取文本内容,虽然市面上有不少相关工具,但它们要么功能过于复杂,要么使用不够方便,本文将介绍如何使用Python开发一个简单实用的PDF文本提取工具,需要的朋友可以参考下
    2025-02-02
  • 一篇文章教会你PYcharm的用法

    一篇文章教会你PYcharm的用法

    这篇文章主要介绍了Pycharm新手使用教程(图文详解),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • python元类编程的基本使用

    python元类编程的基本使用

    本文主要介绍了python元类编程的基本使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 详解python算法之冒泡排序

    详解python算法之冒泡排序

    这篇文章主要介绍了详解python算法之冒泡排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法

    PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法

    本文主要介绍PyQt界面实现中常用的消息弹出对话框、提供用户输入的输入框、打开文件获取文件/目录路径的文件对话框。 本文主要针对这三种控件的主要场景进行介绍。感兴趣的朋友跟随小编一起看看吧
    2019-08-08
  • Windows下安装python MySQLdb遇到的问题及解决方法

    Windows下安装python MySQLdb遇到的问题及解决方法

    这篇文章主要介绍了Windows下安装python MySQLdb遇到的问题及解决方法,需要的朋友可以参考下
    2017-03-03
  • python print()函数的end参数和sep参数的用法说明

    python print()函数的end参数和sep参数的用法说明

    这篇文章主要介绍了python print()函数的end参数和sep参数的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python实现对比两个Excel数据内容并标记出不同

    Python实现对比两个Excel数据内容并标记出不同

    日常工作中需要对比两个Excel工作表中的数据差异是很不方便的,使用python来做就比较简单了!本文为大家介绍了python实现对比两个Excel的数据内容并标记出不同数据的示例代码,需要的可以参考一下
    2022-12-12
  • Python图像运算之图像灰度非线性变换详解

    Python图像运算之图像灰度非线性变换详解

    这篇文章将详细讲解图像灰度非线性变换。图像灰度非线性变换主要包括对数变换、幂次变换、指数变换、分段函数变换,通过非线性关系对图像进行灰度处理,本文主要讲解三种常见类型的灰度非线性变换,感兴趣的可以了解一下
    2022-03-03
  • 基于Python实现主机远程控制

    基于Python实现主机远程控制

    这篇文章主要介绍了基于Python实现主机远程控制,本文为 HITwh 网络空间安全专业网络空间安全设计与实践选题,主要实现了远程监控局域网内的主机桌面与网络情况、简单键鼠控制、远程断网(ARP 攻击)、数据加密传输等功能,下面来看看具体实现过程吧
    2022-01-01

最新评论