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'