在Python中打开文件时如何指定缓冲区大小?

如果看一下open-open(name [,mode [,buffering]])的函数定义,您会发现在Python 2中它需要3个参数,第三个是缓冲。可选的buffering参数指定文件所需的缓冲区大小:0表示未缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲意味着使用系统默认值,通常对tty设备使用行缓冲,而对于其他文件则使用完全缓冲。如果省略,则使用系统默认值。

例如,如果要打开缓冲区大小为128字节的文件,则可以这样打开文件-

>>> open('my_file', 'r+', 128)

在Python 3中,open的函数定义为:open(file,mode ='r',buffering = -1,encoding = None,errors = None,newline = None,closefd = True,opener = None)。buffering是用于设置缓冲策略的可选整数。传递0以关闭缓冲(仅在二进制模式下允许),传递1以选择行缓冲(仅在文本模式下可用),并传递大于1的整数来指示固定大小的块缓冲区的字节大小。当没有给出缓冲参数时,默认缓冲策略如下:

  • 二进制文件以固定大小的块缓冲;缓冲区的大小是通过试探法来确定底层设备的“块大小”,然后再使用io.DEFAULT_BUFFER_SIZE来选择的。

  • “交互式”文本文件(为其isatty()返回True的文件)使用行缓冲。其他文本文件将上述策略用于二进制文件。

Python 3的示例与Python 2相同。例如,如果您要打开缓冲区大小为128字节的文件,则可以这样打开文件-

>>> open('my_file', 'r+', 128)