当前位置:   article > 正文

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

python open buffering

1、如何设置文件的缓冲

        实际案例:

                将文件内容写到硬件设备时,使用系统调用,这类I/O操作的时间很长。为了减少I/O操作的次数,文件通常使用缓冲区。(有足够多的数据才进行系统调用)文件的缓冲行为,分为全缓冲、行缓冲、无缓冲。

                如何设置python中文件对象的缓冲行为?python文件对象默认的缓冲行为4个字节(4096)

        解决方案:

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

                行缓冲:open函数的buffering设置为1 。

                无缓冲:pen函数的buffering设置为0。

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

2、文件缓冲介绍?

        对于磁盘这类的块设备,它的读写不是一个字节一个字节完成的,而是按块每次读写一个块,假设一个块的大小是4096个字节,那就意味着写入一个字节和写入4096个字节都需要一次I/O操作,它们的用时是相同的。在这种情况为了提高效率就要减少I/O操作的次数,使用的手段就是为文件设立一个缓冲区。当需要写入的字节数不足一个块设备大小的时候,那么都放入缓冲区当中,凑够一个块的大小才调用一次系统调用。

        全缓冲就是缓冲区有一定大小满足那个数量就进行一次系统调用;

        行缓冲就是碰到一个换行符就进行一次输出也就是一次系统调用;

        无缓冲就是不希望有缓冲的实时写入到文件,如串口设备,需要及时的发送到串口上去。

3、代码演示

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/278281
推荐阅读
相关标签
  

闽ICP备14008679号