open(file, mode=‘r‘, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=No

简介: open(file, mode=‘r‘, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=No

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)


打开 file 并返回对应的 file object。 如果该文件不能被打开,则引发 OSError。 请参阅 读写文件 获取此函数的更多用法示例。


file 是一个 path-like object,表示将要打开的文件的路径(绝对路径或者相对当前工作目录的路径),也可以是要封装文件对应的整数类型文件描述符。(如果给出的是文件描述符,则当返回的 I/O 对象关闭时它也会关闭,除非将 closefd 设为 False 。)


mode 是一个指明文件打开模式的可选字符串。 它默认为 'r' 表示以文本模式读取。 其他常见模式有表示写入的 'w' (若文件已存在则将其清空),表示独占创建的 'x',以及表示追加写入的 'a' (在 某些 Unix 系统上,这意味着无论当前查找位置在哪里 所有 写入操作都将追加到文件末尾)。 在文本模式下,如果未指定 encoding 则所使用的编码格式将依赖于具体平台: locale.getencoding() 会被调用以获取当前语言区域的编码格式。 (对于读取和写入原始字节数据请使用二进制模式并且不要指定 encoding。) 可用的模式有:

字符

含意

'r'

读取(默认)

'w'

写入,并先截断文件

'x'

排它性创建,如果文件已存在则失败

'a'

打开文件用于写入,如果文件存在则在末尾追加

'b'

二进制模式

't'

文本模式(默认)

'+'

打开用于更新(读取与写入)


默认模式为 'r' (打开文件用于读取文本,与 'rt' 同义)。'w+' 和 'w+b' 模式将打开文件并清空内容。而 'r+' 和 'r+b' 模式将打开文件但不清空内容。


正如在 概述 中提到的,Python区分二进制和文本I/O。以二进制模式打开的文件(包括 mode 参数中的 'b' )返回的内容为 bytes 对象,不进行任何解码。在文本模式下(默认情况下,或者在 mode 参数中包含 't' )时,文件内容返回为 str ,首先使用指定的 encoding (如果给定)或者使用平台默认的的字节编码解码。


备注


Python不依赖于底层操作系统的文本文件概念;所有处理都由Python本身完成,因此与平台无关。


buffering 是一个可选的整数,用于设置缓冲策略。 传入 0 来关闭缓冲(仅在二进制模式下允许),传入 1 来选择行缓冲(仅在文本模式下写入时可用),传一个整数 > 1 来表示固定大小的块缓冲区的字节大小。 注意这样指定缓冲区的大小适用于二进制缓冲的 I/O,但 TextIOWrapper (即用 mode='r+' 打开的文件) 会有另一种缓冲。 要禁用 TextIOWrapper 中的缓冲,请考虑为 io.TextIOWrapper.reconfigure() 使用 write_through 旗标。 当没有给出 buffering 参数时,默认的缓冲策略规则如下:


  • 二进制文件以固定大小的块进行缓冲;缓冲区的大小是使用启发方式来尝试确定底层设备的“块大小”并会回退至 io.DEFAULT_BUFFER_SIZE。 在许多系统上,缓冲区的长度通常为 4096 或 8192 字节。


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

encoding 是用于编码或编码文件的编码格式名称。 这应当只有文本模式下使用。 默认的编码格式依赖于具体平台 (即 locale.getencoding() 所返回的值),但是任何 Python 支持的 text encoding 都可以被使用。 请参阅 codecs 模块获取受支持的编码格式列表。


errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。可以使用各种标准错误处理程序(列在 错误处理方案 ),但是使用 codecs.register_error() 注册的任何错误处理名称也是有效的。标准名称包括:

  • 如果存在编码错误,'strict' 会引发 ValueError 异常。 默认值 None 具有相同的效果。


  • 'ignore' 忽略错误。请注意,忽略编码错误可能会导致数据丢失。


  • 'replace' 会将替换标记(例如 '?' )插入有错误数据的地方。


  • 'surrogateescape' 将把任何不正确的字节表示为 U+DC80 至 U+DCFF 范围内的下方替代码位。 当在写入数据时使用 surrogateescape 错误处理器时这些替代码位会被转回到相同的字节。 这适用于处理具有未知编码格式的文件。


  • 'xmlcharrefreplace' 仅在写入文件时才受到支持。 编码格式不支持的字符将被替换为相应的 XML 字符引用 &#nnn;。


  • '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 来使用自定义开启器。然后通过使用参数( file,flags )调用 opener 获得文件对象的基础文件描述符。 opener 必须返回一个打开的文件描述符(使用 os.open as opener 时与传递 None 的效果相同)。


新创建的文件是 不可继承的。


下面的示例使用 os.open() 函数的 dir_fd 的形参,从给定的目录中用相对路径打开文件:


>>>

>>> import os

>>> dir_fd = os.open('somedir', os.O_RDONLY)

>>> def opener(path, flags):

...     return os.open(path, flags, dir_fd=dir_fd)

...

>>> with open('spamspam.txt', 'w', opener=opener) as f:

...     print('This will be written to somedir/spamspam.txt', file=f)

...

>>> os.close(dir_fd)  # don't leak a file descriptor

open() 函数所返回的 file object 类型取决于所用模式。 当使用 open() 以文本模式 ('w', 'r', 'wt', 'rt' 等) 打开文件时,它将返回 io.TextIOBase (具体为 io.TextIOWrapper) 的一个子类。 当使用缓冲以二进制模式打开文件时,返回的类是 io.BufferedIOBase 的一个子类。 具体的类会有多种:在只读的二进制模式下,它将返回 io.BufferedReader;在写入二进制和追加二进制模式下,它将返回 io.BufferedWriter,而在读/写模式下,它将返回 io.BufferedRandom。 当禁用缓冲时,则会返回原始流,即 io.RawIOBase 的一个子类 io.FileIO。


相关文章
|
3月前
|
Python
完美解决丨File “invalid.py“, line 1 print(`Hello World!`) ^ SyntaxError: invalid syntax
完美解决丨File “invalid.py“, line 1 print(`Hello World!`) ^ SyntaxError: invalid syntax
|
10月前
|
编译器 C语言
__FILE__, __LINE__ __FUNCTION__
__FILE__, __LINE__ __FUNCTION__
Newline required at end of file but not found.
Newline required at end of file but not found.
140 0
Newline required at end of file but not found.
|
Windows
UE INI File Operation [ Read / Write ] Plug-in description
UE INI File Operation [ Read / Write ] Plug-in description
54 0
成功解决absl.flags._exceptions.UnrecognizedFlagError: Unknown command line flag 'data_format'
成功解决absl.flags._exceptions.UnrecognizedFlagError: Unknown command line flag 'data_format'
ini_set ("display_errors","On"); 和 error_reporting (E_ALL);
ini_set ("display_errors","On"); 和 error_reporting (E_ALL);
|
XML 数据格式
因为CircleImageView导致Binary XML file line #96: Error inflating class <unknown>
因为CircleImageView导致Binary XML file line #96: Error inflating class <unknown>
168 0
SyntaxError: Non-ASCII character '\xe8' in file lane_detector.py on line 5, but no encoding declared;
在进行编译运行的时候报的错,此错是中文乱码的问题,就算是注释也不行.我们需要指定字符集
open函数: 可以帮助我们获取文件对象 内置函数 open(file, mode='r', buffering=-1, encoding=None, errors=None
open函数: 可以帮助我们获取文件对象 内置函数 open(file, mode='r', buffering=-1, encoding=None, errors=None
|
Python
SyntaxError: Non-ASCII character '\xc4' in file newYear.py on line 6, but no encoding declared;
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/79293467 ...
1319 0