用法:
open(file, mode='r', buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
打开
file
并返回相应的文件对象。如果无法打开文件,则会引发OSError
。有关如何使用此函数的更多示例,请参阅读取和写入文件。file
是一个 path-like 对象,它给出要打开的文件的路径名(绝对或相对于当前工作目录)或要包装的文件的整数文件说明符。 (如果给定文件说明符,则在关闭返回的 I/O 对象时将其关闭,除非closefd
设置为False
。)mode
是一个可选字符串,用于指定打开文件的模式。它默认为'r'
,这意味着以文本模式打开以供阅读。其他常见的值是用于写入的'w'
(如果文件已经存在则截断文件)、用于独占创建的'x'
和用于追加的'a'
(在some
Unix 系统上,意味着all
写入追加到无论当前的查找位置如何,文件的结尾)。在文本模式下,如果未指定encoding
,则使用的编码取决于平台:调用locale.getpreferredencoding(False)
以获取当前的语言环境编码。 (对于读取和写入原始字节,请使用二进制模式并保持encoding
未指定。)可用的模式是:特点
意义
'r'
打开阅读(默认)
'w'
打开写入,首先截断文件
'x'
打开以独占创建,如果文件已存在则失败
'a'
打开写入,如果存在则附加到文件末尾
'b'
二进制模式
't'
文本模式(默认)
'+'
开放更新(读写)
默认模式是
'r'
(打开阅读文本,'rt'
的同义词)。'w+'
和'w+b'
模式打开并截断文件。'r+'
和'r+b'
模式打开文件时不进行截断。如概述中所述,Python 区分二进制和文本 I/O。以二进制模式打开的文件(包括
mode
参数中的'b'
)将内容作为bytes
对象返回,无需任何解码。在文本模式下(默认情况下,或者当't'
包含在mode
参数中时),文件的内容以str
的形式返回,这些字节首先使用平台相关的编码或使用指定的解码encoding
如果给定。允许使用额外的模式字符
'U'
,它不再有任何效果,并且被视为已弃用。它之前在文本模式下启用了通用换行符,这成为 Python 3.0 中的默认行为。有关更多详细信息,请参阅换行参数的文档。注意
Python 不依赖于底层操作系统的文本文件概念;所有的处理都是由 Python 自己完成的,因此与平台无关。
buffering
是用于设置缓冲策略的可选整数。传递 0 以关闭缓冲(仅在二进制模式下允许),1 以选择行缓冲(仅在文本模式下可用),以及整数 > 1 以指示固定大小的块缓冲区的大小(以字节为单位)。当没有给出buffering
参数时,默认缓冲策略的工作方式如下:- 二进制文件以固定大小的块缓冲;缓冲区的大小是通过尝试确定底层设备的 “block size” 并退回到
io.DEFAULT_BUFFER_SIZE
的启发式方法来选择的。在许多系统上,缓冲区通常为 4096 或 8192 字节长。 - “Interactive” 文本文件(
isatty()
返回True
的文件)使用行缓冲。其他文本文件使用上述二进制文件的策略。
encoding
是用于对文件进行解码或编码的编码名称。这应该只在文本模式下使用。默认编码取决于平台(无论locale.getpreferredencoding()
返回什么),但可以使用 Python 支持的任何文本编码。有关支持的编码列表,请参阅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
作为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()
函数返回的文件对象类型取决于模式。当open()
用于以文本模式('w'
、'r'
、'wt'
、'rt'
等)打开文件时,它返回io.TextIOBase
的子类(特别是io.TextIOWrapper
)。当用于以带缓冲的二进制模式打开文件时,返回的类是io.BufferedIOBase
的子类。确切的类有所不同:在读取二进制模式下,它返回一个io.BufferedReader
;在写入二进制和附加二进制模式下,它返回一个io.BufferedWriter
,在读/写模式下,它返回一个io.BufferedRandom
。禁用缓冲时,将返回原始流,即io.RawIOBase
的子类io.FileIO
。另请参阅文件处理模块,例如
fileinput
、io
(其中声明了open()
)、os
、os.path
、tempfile
和shutil
。使用参数
file
、mode
、flags
引发审计事件open
。mode
和flags
参数可能已被修改或从原始调用中推断出来。在 3.3 版中更改:添加了
opener
参数。添加了
'x'
模式。如果以独占创建模式(
'x'
)打开的文件已经存在,则会引发FileExistsError
。
在 3.4 版中更改:该文件现在不可继承。
自 3.4 版起已弃用,在 3.10 版中删除:
'U'
模式。在 3.5 版中更改:如果系统调用被中断并且信号处理程序没有引发异常,则该函数现在重试系统调用而不是引发
InterruptedError
例外(见PEP 475理由)。添加了
'namereplace'
错误处理程序。
在 3.6 版中更改:添加了支持以接受实现
os.PathLike
的对象。在 Windows 上,打开控制台缓冲区可能会返回
io.RawIOBase
的子类,而不是io.FileIO
。
- 二进制文件以固定大小的块缓冲;缓冲区的大小是通过尝试确定底层设备的 “block size” 并退回到
相关用法
- Python open()用法及代码示例
- Python operator.truth()用法及代码示例
- Python operator.le()用法及代码示例
- Python operator.ge()用法及代码示例
- Python operator.eq()用法及代码示例
- Python operator.itemgetter用法及代码示例
- Python operator.not_()用法及代码示例
- Python operator.lt()用法及代码示例
- Python operator.attrgetter用法及代码示例
- Python operator.ne()用法及代码示例
- Python operator.methodcaller用法及代码示例
- Python operator.gt()用法及代码示例
- Python optparse.OptionParser.set_defaults用法及代码示例
- Python os.path.normcase()用法及代码示例
- Python os.read()用法及代码示例
- Python os.DirEntry.inode()用法及代码示例
- Python os.closerange()用法及代码示例
- Python os.set_blocking()用法及代码示例
- Python os.pathconf()用法及代码示例
- Python os.chflags()用法及代码示例
注:本文由纯净天空筛选整理自python.org大神的英文原创作品 open。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。