马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 一个账号 于 2020-3-17 10:41 编辑
Python open() 函数
语法
open(file, mode="r", buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数
参数 | 描述 | file | 要打开的文件 | mode | 打开方式 | encoding | 设置编码格式,默认为 cp936(GBK) |
buffering
buffering 用于设置缓冲策略。传递 0 表示关闭缓冲(仅允许在二进制模式下),1 表示行缓冲(仅在文本模式下可用),
大于 1 表示以指示固定大小的块缓冲区的大小(以字节为单位)。如果没有给出缓冲参数,则默认缓冲策略的工作方式如下:
二进制文件以固定大小的块缓冲;默认 buffer 大小由 io.DEFAULT_BUFFER_SIZE 确定。在许多系统上,缓冲区通常为 4096 或 8192 字节长。
“交互式” 文本文件(isatty() 返回 True 的文件)使用行缓冲。其他文本文件使用上述策略用于二进制文件。
errors
errors 表示指定如何处理编码和解码错误,这不能在二进制模式下使用。
可以使用各种标准错误处理程序(在错误处理程序下列出),但已在 codecs.register_error() 中注册的任何错误处理名称也是有效的。
newline
行符 newline 控制通用换行模式的工作方式(仅适用于文本模式)。
它可以是None, ``, \n, \r 和 \r\n。它的工作原理如下:
从流中读取输入时,如果换行为None,则启用通用换行模式。
输入中的行可以以\n,\r或\r\n结尾,并且在返回给调用者之前将这些行转换为\n。
如果是 ``,则启用通用换行模式,但行结尾将返回到未翻译的调用者。
如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。
将输出写入流时,如果换行为 None,则写入的任何 "\n" 字符都将转换为系统默认行分隔符 os.linesep 。
如果换行符是 `` 或 \n,则不会进行翻译。如果换行符是任何其他合法值,则写入的任何 "\n" 字符都将转换为给定的字符串。
closefd
如果 closefd 为 False 并且给出了文件描述符而不是文件名,则在关闭文件时,
底层文件描述符将保持打开状态。如果给出文件名,则 closefd 必须为 True(默认值),否则将引发错误。
opener
通过传递可调用的 opener 可以使用自定义 opener。然后通过使用(file,flags)调用opener来获取文件对象的基础文件描述符。
opener必须返回一个打开的文件描述符(传递 os.open 作为 opener 导致类似于传递 None 的功能)。
新创建的文件是不可继承的。
打开方式
模式 | 描述 | r | 以只读模式打开,文件不存在会报错 | rb | 以二进制只读模式打开一个文件 | r+ | 以读写模式打开,文件不存在会报错 | rb+ | 以二进制读写模式打开一个文件,文件不存在会报错 | w | 以写入模式打开一个文件,如文件存在删除里面的内容,文件不存在创建新文件 | wb | 以二进制写入模式打开一个文件,如文件存在删除里面的内容,文件不存在创建新文件 | w+ | 以读写模式打开,如文件存在删除里面的内容,文件不存在创建新文件 | wb+ | 以二进制读写模式打开一个文件,如文件存在删除里面的内容,文件不存在创建新文件 | a | 以写入模式打开一个文件,如果文件存在往后追加(文件指针在最后面),如果不存在创建新文件 | ab | 以二进制写入模式打开一个文件,如果文件存在往后追加(文件指针在最后面),如果不存在创建新文件 | a+ | 以读写模式打开一个文件,如果文件存在往后追加(文件指针在最后面),如果不存在创建新文件[ | ab+ | 以二进制读写模式打开一个文件,如果文件存在往后追加(文件指针在最后面),如果不存在创建新文件 |
描述
open() 函数用于打开一个文件,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
返回值
文件对象。
例子
>>> file = open("d:/test.txt", "a", encoding="utf-8", buffering=1)
>>> print(file)
<_io.TextIOWrapper name='d:/test.txt' mode='a' encoding='utf-8'>
>>> print(type(file))
<class '_io.TextIOWrapper'>
|