用法:
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'(在someUnix 系统上,意味着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 descriptoropen()函数返回的文件对象类型取决于模式。当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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
