open(file, mode = ‘r’, buffering = -1, encoding = None, errors = None, newline = None, closefd = True, opener = None)
file: 文件路径(相对或者绝对路径)。(必须)
mode: 文件打开模式 (默认’rt’模式)
buffering: 设置缓冲策略
encoding: 一般使用utf8,不同平台的 ecoding 参数值不同, Windows 的默认为 cp936( GBK 编码)
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
mode参数:
模式
描述
t
文本模式(默认)
x
写模式,新建文件,如果文件已存在则会报错
+
打开文件进行更新(可读可写)
b
二进制模式
r
只读模式 ,文件指针在文件的开头(默认)
r+
读写模式,文件指针在文件的开头,写入内容不会覆盖原文本
rb
以二进制格式、只读模式打开文件,一般用于非文本文件:图片、音频等
rb+
以二进制格式、读写模式打开文件,文件指针在文件的开头
w
只写模式,如果文件已存在则打开文件,且
原有内容会被删除
,从开头开始编辑。如果文件不存在,则创建新文件。不能使用 .read() 方法
w+
读写模式。如果文件已存在则打开文件,且原有内容会被删除,从开头开始编辑;如果文件不存在,创建新文件。可以使用 .read() 方法
wb
以二进制格式、只读模式打开文件。如果文件已存在则打开文件,且原有内容会被删除,从开头开始编辑。如果文件不存在,创建新文件。一般用于非文本文件:图片、音频等。
wb+
以二进制格式、读写模式打开文件。如果文件已存在则打开文件,且原有内容会被删除,从开头开始编辑;如果文件不存在,创建新文件。一般用于非文本文件:图片、音频等
a
追加模式,对文件只有写入权限。如果文件已存在,文件指针在文件的结尾,新的内容将会被写入到已有内容之后;如果文件不存在,创建新文件进行写入。不能使用 .read()方法
a+
读写模式,对文件内容进行追加。如果文件已存在,文件指针在文件的结尾,对文件进行追加内容;如果文件不存在,创建新文件用于读写。可以使用 .read() 方法
ab
以二进制格式、追加模式打开文件。如果文件已存在,文件指针在文件的结尾,新的内容将会被写入到已有内容之后;如果文件不存在,创建新文件进行写入。
ab+
以二进制格式、读写模式打开文件,对文件内容进行追加。如果文件已存在,文件指针在文件的结尾,新的内容将会被写入到已有内容之后;如果文件不存在,创建新文件进行写入。
buffering参数:设置缓冲策略。如果 buffing 参数的值为 0(或者 False),则表示打开指定文件时不使用缓冲区;如果 buffing 参数值为大于 1 的整数,该整数用于指定缓冲区的大小(单位是字节);如果 buffing 参数的值为负数,则代表使用默认的缓冲区大小。
errors:处理编码和解码错误。python中着有
注册的错误处理
,还有多种标准
错误处理程序
newline参数:控制
通用换行符
模式的工作原理。可以是None、’’、’\n’、’\r’、’\r\n’,工作原理:
1、从流读取输入:如果newline为None,则启用通用换行符模式。输入中的行可以以’\n’,’\r’或’\r\n’结尾,它们在返回给调用者之前被转换成’\n’。如果是’’,则启用通用换行符模式,但行结尾将返回给调用者而不会转换。如果是任何其它合法值,则输入行仅由给定字符串终止,并且行结尾被返回给调用者而不会转换。
2、将输出写入流:如果newline为None,则写入的任何’\n’字符都将转换为系统默认行分隔符
os.linesep
。如果newline是’‘或’\n’,则不会进行转换。如果newline是任何其他合法值,写入的任何’\n’字符都将转换为给定字符串。
closefd参数:如果是False并且给出了文件描述器而不是文件名,则当文件关闭时,基本文件描述器将保持打开。如果给定文件名,则closefd必须为True(默认值),否则将产生错误。
file 对象使用 open 函数来创建, file 对象常用的函数、属性:
file.name:返回文件的名称
file.closed:判断文件是否己经关闭
file.mode:返回文件采用的打开模式(mode的参数)
file.encoding:返回文件打开使用的编码格式;
file.tell():返回文件指针当前的位置
file.flush():用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。一般情况下,文件关闭后会自动刷新缓冲区,但有时需要在关闭前刷新它,这时就可以使用 flush() 方法。
file.seek(offset, whence):移动文件读取指针到指定位置
offset :开始的偏移量,代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。
whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移:0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。
>>> f = open('file', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(7) # 移动到文件的第八个字节
7
>>> f.read(1)
b'7'
>>> f.seek(-2, 2) # 移动到文件倒数第三个字节
13
>>> f.read(1)
b'e'