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'它的工作原理如下:

  • 从流读取输入时,如果newlineNone,则启用通用换行符模式。输入中的行可以以'\n''\r''\r\n'结尾,它们在返回给调用者之前被转换成'\n'如果它是'',则启用通用换行符模式,但行结尾将返回给调用者而不会转换。如果它具有任何其它合法值,则输入行仅由给定字符串终止,并且行结尾被返回给调用者而不会转换。
  • 将输出写入流时,如果newlineNone,则写入的任何'\n'字符都将转换为系统默认行分隔符os.linesep如果newline'''\n',则不会进行转换。如果newline是任何其他合法值,写入的任何'\n'字符都将转换为给定字符串。

如果closefdFalse并且给出了文件描述器而不是文件名,则当文件关闭时,基本文件描述器将保持打开。如果给定文件名,则closefd必须为True(默认值),否则将产生错误。

通过传递可调用对象opener可以使用自定义开启器。然后通过调用opener文件标志)获取文件对象的基础文件描述器。opener必须返回一个打开的文件描述器(传递os.openopener 结果类似的功能 None)。

 

 

 

posted @ 2019-05-30 00:28  IMWU  阅读(9854)  评论(0编辑  收藏  举报