Python open()完整参数
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
打开 file 并返回一个相应的 文件对象.如果文件不能被打开, 抛出 OSError
异常.
参数 file 是一个字符串表示的文件名称,或者一个数组表示的文件名称。文件名称可以是相对当前目录的路径,也可以是绝对路径表示。(如果给出了一个文件描述器,则当关闭返回的I / O对象时除外,除非closefd设置为False
。
参数 mode 是指明打开文件的模式。默认值是'r'
,表示使用文本的方式打开文件来读取。其他常见值为'w'
用于写入(如果文件已经存在则截断文件),'x'
用于排他性创建,'a'
(在某些 Unix系统上,意味着全部写入追加到文件的末尾,而不管当前的查找位置)。在文本模式下,如果未指定encoding,则使用的编码取决于平台:locale.getpreferredencoding(False)
以获取当前语言环境编码。(对于读取和写入原始字节,使用二进制模式,不指定编码。可用的模式有:
字符 | 含义 |
---|---|
'r' |
打开阅读(默认) |
'w' |
打开写入,首先截断文件 |
'x' |
打开独占创建,如果文件已经存在则失败 |
'a' |
打开写入,追加到文件末尾(如果存在) |
'b' |
二进制模式 |
't' |
文本模式(默认) |
'+' |
打开磁盘文件进行更新(读取和写入) |
'U' |
通用换行符模式(已弃用) |
默认模式为'r'
(打开阅读文本,'rt'
的同义词)。对于二进制读写访问,模式'w b'
打开并将文件截断为0字节。'r b'
打开文件而不截断。
如概述中所述,Python区分二进制和文本I / O。以二进制模式打开的文件(包括模式参数中的'b'
)将内容作为字节
对象,而不进行任何解码。在文本模式(默认情况下,或当't'
包括在模式参数中)时,文件的内容将作为str
,这些字节已经使用平台相关编码首先解码,或者如果给出则使用指定的编码。
注意:Python不依赖于底层操作系统的文本文件的概念;所有的处理都是由Python本身完成的,因此是平台无关的。
参数 buffering是用于设置缓冲策略的可选整数。通过0以关闭缓冲(仅在二进制模式下允许),1选择行缓冲(仅在文本模式下可用)和整数当未给出buffers参数时,默认缓冲策略工作如下:
- 二进制文件以固定大小的块缓冲;使用启发式尝试确定底层器件的“块大小”并回退到
io.DEFAULT_BUFFER_SIZE
来选择缓冲区的大小。在许多系统上,缓冲区通常为4096或8192字节长。 - “交互式”文本文件(
isatty()
返回True
的文件)使用行缓冲。其他文本文件使用上述策略用于二进制文件。
参数 encoding是用于解码或编码文件的编码的名称。这应该只在文本模式下使用。默认编码是平台相关的(无论locale.getpreferredencoding()
返回),但是可以使用Python支持的任何文本编码。有关支持的编码列表,请参阅编解码器
模块。
参数 errors是一个可选字符串,指定如何处理编码和解码错误 - 这不能在二进制模式下使用。虽然使用codecs.register_error()
注册的任何错误处理名称也有效,但仍提供了多种标准错误处理程序(在错误处理程序下列出)。标准名称包括:
'strict'
引发ValueError
例外,如果存在编码错误。默认值None
具有相同的效果。'ignore'
忽略错误。请注意,忽略编码错误可能会导致数据丢失。'replace'
会导致替换标记(例如'?'
)插入到存在格式错误的数据的位置。'surrogateescape'
将表示任何不正确的字节,作为从U DC80到U DCFF范围内的Unicode私人使用区域中的代码点。当写入数据时使用surrogateescape
错误处理程序时,这些专用代码点将被转回相同的字节。这对于处理未知编码中的文件很有用。- 仅当写入文件时,才支持
'xmlcharrefreplace'
。编码不支持的字符将替换为相应的XML字符引用
'backslashreplace'
通过Python的反斜杠转义序列替换格式错误的数据。'namereplace'
(也仅在编写时支持)用\ N {...}
转义序列替换不支持的字符。
参数 newline控制通用换行符模式的工作原理(仅适用于文本模式)。它可以是None
、''
、'\n'
、'\r'
、'\r\n'
。它的工作原理如下:
- 从流读取输入时,如果newline为
None
,则启用通用换行符模式。输入中的行可以以'\n'
,'\r'
或'\r\n'
结尾,它们在返回给调用者之前被转换成'\n'
。如果它是''
,则启用通用换行符模式,但行结尾将返回给调用者而不会转换。如果它具有任何其它合法值,则输入行仅由给定字符串终止,并且行结尾被返回给调用者而不会转换。 - 将输出写入流时,如果newline为
None
,则写入的任何'\n'
字符都将转换为系统默认行分隔符os.linesep
。如果newline是''
或'\n'
,则不会进行转换。如果newline是任何其他合法值,写入的任何'\n'
字符都将转换为给定字符串。
如果closefd是False
并且给出了文件描述器而不是文件名,则当文件关闭时,基本文件描述器将保持打开。如果给定文件名,则closefd必须为True
(默认值),否则将产生错误。
通过传递可调用对象opener可以使用自定义开启器。然后通过调用opener(文件,标志)获取文件对象的基础文件描述器。opener必须返回一个打开的文件描述器(传递os.open
为opener 结果类似的功能 None
)。