当前位置: 首页 > 编程笔记 >

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

魏楷
2023-03-14
本文向大家介绍在Python中打开文件时如何指定缓冲区大小?,包括了在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的整数来指示固定大小的块缓冲区的字节大小。当没有给出缓冲参数时,默认缓冲策略如下:

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

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

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

>>> open('my_file', 'r+', 128)
 类似资料:
  • 当我打开netrw并选择一个文件时,它会在一个新缓冲区中打开。这意味着如果我转到之前打开的缓冲区,我将返回netrw,而不是我之前编辑的文件。 我如何改变这种行为,这样我就可以在netrw的缓冲区中打开新文件,或者关闭我用来打开文件的缓冲区?

  • 问题内容: 在Linux中,可以使用以下命令为网络数据包(例如UDP)指定系统的默认接收缓冲区大小: 但我想知道,应用程序(例如in中)是否可以通过在运行时指定每个UDP套接字的接收缓冲区大小来覆盖系统的默认值? 问题答案: 您可以从默认值增加该值,但不能将其增加到最大值以上。使用更改选项: 请注意,这是便携式解决方案。它可以在任何POSIX平台上工作,以增加接收缓冲区的大小。Linux已经进行了

  • 问题内容: 我有一个从文件创建MessageDigest(哈希)的方法,我需要对很多文件(> = 100,000)执行此操作。为了使性能最大化,我应该为读取文件设置多大的缓冲区? 大多数人都熟悉基本代码(以防万一,在此重复): 最大化吞吐量的理想缓冲区大小是多少?我知道这是与系统有关的,并且我很确定它与操作系统,文件系统和 HDD有关,并且可能还有其他硬件/软件。 (我应该指出,我是Java的新手

  • 问题内容: 如何打开一个Excel文件以便在Python中读取? 例如,我已经使用read命令打开了文本文件。如何为Excel文件执行此操作? 问题答案: 编辑: 在较新版本的pandas中,您可以将工作表名称作为参数传递。 检查文档以获取有关如何通过的示例sheet_name:https : //pandas.pydata.org/pandas-docs/stable/generation/pa

  • 问题内容: 我正在尝试从FTP服务器读取文件。该文件是一个文件。我想知道在套接字打开的情况下是否可以对此文件执行操作。我试图按照什么分两个问题,提到的阅读文件,而不写入磁盘和读取从FTP文件,而无需下载,但没有成功。 我知道如何提取下载文件上的数据/工作,但不确定是否可以即时执行。有没有一种方法可以连接到站点,在缓冲区中获取数据,还可以提取某些数据并退出? 尝试StringIO时出现错误: 我只需

  • 我正试图将大量数据写入我的SSD(固态驱动器)。我指的是80GB。 我浏览了网页寻找解决方案,但我想出的最好的办法是: 使用Visual Studio 2010编译并进行全面优化并在Windows7下运行,该程序的最大容量约为20MB/s。真正让我困扰的是,Windows可以以150MB/s到200MB/s之间的速度将文件从其他SSD复制到此SSD。所以至少快了7倍。这就是为什么我认为我应该能够走