Python 内置函数之文件操作 open

Python 的 open() 函数用于打开一个文件,创建一个 file 对象,然后进行操作

open 语法

1
2
3
4
5
6
7
8
9
10
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

参数:
file:必选,文件路径(相对或绝对路径)
mode:可选,文件打开模式,默认是‘r’;’r’以只读打开文件,’w’只写入;’a’在文件后追加(文件已存在);文件不存在时,创建并写入文件
buffering:设置缓冲
encoding:设置编码方式,。一般使用UTF-8
errors:报错级别
newline:区分换行符
closefd:传入的 file 参数类型

示例:f = open('abc.txt', 'r', encoding='gbk')

模式的类型:

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。一般用于非文本文件,如图片、视频等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件,如图片、视频等。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,则创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,则创建新文件。一般用于非文本文件,如图片、视频等。
w+ 打开一个文件用于读写。如果该文件已存在,则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,则创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,则创建新文件。一般用于非文本文件,如图片、视频等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
x 写模式,新建一个文件,如果该文件已存在则会报错。
b 二进制模式。
+ 打开一个文件进行更新(可读可写)。
U 通用换行模式(Python 3 不支持)。
t 文本模式 (默认)。

file 对象方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
file.read([size]):从文件中读取指定的字符数,参数可加数字,如 read(size),size 为返回的字符数,如果 size 未给定或为负则读取所有。
file.readline([size]):读取整行;size 表示读取第一行多少字符;size=0 则读取第一行全部的数据。
file.readlines([sizeint]):读取所有行,并将每一行作为一个字符串存储在一个列表中,并返回列表;若给定 sizeint>0 则只读取第一行字符,且带‘\n’,也以列表格式输出;


file.seek(offset[, whence]):用来移动文件指针。
offset 偏移量: 单位为字节,可正可负,如果为负数,表示从倒数第几位开始;
whence 起始位置,默认 0: 为 offset 定义一个参数,表示要从哪个位置开始偏移;0 表示从文件开头开始算起,1 表示从当前位置开始算起,2 表示从文件末尾开始算起;


file.write(str):将字符串写入文件,返回的是写入的字符串的长度。
file.writelines(sequence):向文件写入一个字符串列表,如果需要换行则要自己加入每行的换行符


file.tell():返回一个整数(就是到文件头的字节数),表示当前文件指针的位置(光标位置)。
file.close():关闭文件;关闭文件后无法再进行读写操作;
file.xreadlines():一行一行读,3.x 版本已放弃此写法
file.truncate([size]):从文件开头开始截断,截断 size 个字节;如果没有参数 size,表示从当前位置开始截断,截断之后后面的所有字节都被删除;windows 下的换行代表两个字节大小;
file.flush():用于刷新缓冲区,表示将缓冲区的数据立刻写入到文件中,同时清空缓冲区。
在文件关闭前,或缓冲区刷新前,字符串的内容存储在缓冲区中,这时在文件中是看不到写入的内容的;

代码示例

1
2
3
4
5
6
7
8
9
10
11
fh = open('abc.txt','wb+')  # 打开一个文件并写入
fh.tell() # 文件句柄所在位置
fh.write('Life is like a roller coaster,live it,be happy,enjoy life.\n') #写入一行
fh.writelines(["The best way to make your dreams come true is to wake up.\n","If you're not making mistakes,you're not trying hard enough."]) #写入多行,参数为列表list
fh.seek(0) # 返回文件句柄头
fh.readline() # 读一行
fh.readlines() # 读所有行,返回列表list
fh.read() # 读取全部内容,返回字符串
fh.tell() # 读取当前位置
fh.truncate() # 截取文件句柄头到当前位置的字符串
fh.close() # 关闭文件句柄

当文件非常大时,要一行一行的读文件,要用 for 循环,这时是使用迭代的方式读取文件。

1
2
3
4
fh = open('tfile')
for line in fh:
print(line)
fh.close()

有时我们常常忘记关闭文件句柄,如果不想多写一个关闭文件句柄的代码,可以使用 with 上下文操作(支持同时操作多个文件)

1
2
with open('tfile1') as fh1,open('tfile2') as fh2:
pass

Python 内置函数之文件操作 open
https://flepeng.github.io/021-Python-31-Python-内置函数-Python-内置函数之文件操作-open/
作者
Lepeng
发布于
2021年3月17日
许可协议