小编典典

python的内置open()函数中缓冲的用途是什么?

python

Python说明文件:https :
//docs.python.org/2/library/functions.html#open

open(name[, mode[, buffering]])

上面的文档说:“可选的缓冲参数指定文件所需的缓冲区大小:0表示未缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲表示使用系统默认值。如果省略,则使用系统默认值。”。
当我使用

filedata = open(file.txt,"r",0)

要么

filedata = open(file.txt,"r",1)

要么

filedata = open(file.txt,"r",2)

要么

filedata = open(file.txt,"r",-1)

要么

filedata = open(file.txt,"r")

输出没有变化。上面显示的每一行以相同的速度打印。
输出:

豆先生是15部25-

罗宾·德里斯科尔(Robin Driscoll)撰写并由罗恩·阿特金森(Rowan Atkinson)主演的精彩短片

标题字符。罗宾还写了不同的剧集

Driscoll和Richard Richards,以及Ben Elton的一位。的十三

从1990年1月1日起,飞行员在ITV播出

1995年10月31日,“晚安豆先生”。

豆先生”于1995年12月15日播出,还有一集“

直到2006年才在Nickelodeon播出《伦敦豆先生》。

那么open()函数中的buffering参数如何有用?有什么价值

最好使用哪个缓冲参数?


阅读 223

收藏
2020-12-20

共1个答案

小编典典

Enabling buffering means that you’re not directly interfacing with the OS’s
representation of a file, or its file system API. Instead, a chunk of data is
read from the raw OS filestream into a buffer until it is consumed, at which
point more data is fetched into the buffer. In terms of the objects you get,
you’ll get a BufferedIOBase object wrapping an underlying RawIOBase (which
represents the raw file stream).

这有什么好处?与原始流进行良好的接口可能会导致较高的延迟,因为操作系统必须摆弄诸如硬盘之类的物理对象,并且在所有情况下这都是不可接受的。假设您想每5毫秒从文件中读取三个字母,并且文件位于硬壳旧硬盘甚至网络文件系统上。与其尝试每隔5毫秒从原始文件流中读取数据,不如将文件中的一堆字节加载到内存中的缓冲区中,然后随意使用它。

选择什么大小的缓冲区将取决于您如何使用数据。对于上面的示例,缓冲区大小为1个字符非常糟糕,三个字符是可以的,并且3个字符的较大倍数不会对用户造成明显的延迟将是理想的。

2020-12-20