打开关闭
打开文件
- open(filename, mode,encoding,…)
- name: 要打开的⽬标文件名的字符串(可以包含⽂件所在的具体路径)
- mode: 设置打开⽂件的模式(访问模式): 只读、写⼊、追加等
- encoding: 指定打开文件时的文件编码
fp = open('test.txt', 'r', encoding='utf-8') # 新建 test.txt 文件,给予文件写入操作模式,并赋值给一个变量用于后续操作
如果 mode 不设置,默认就是 r 模式
关闭文件
fp.close()
无论做什么模式、方法操作,最后一定要关闭文件
文件编码
Python3 操作文件时,如果没有指定编码,默认将使用操作系统自带的编码。而 Python2 操作文件时,默认使用 UTF-8 编码
fp = open('text.txt', 'w', encoding='utf-8')fp.write('你猜猜')fp.close()
通过指定编码解决 Python 打开文件出现乱码
访问模式
只读模式
- r 即 read ,只读模式打开文件,如果文件不存在就报错
- 不设置 mode 时,即默认文件为 r 模式
- 文件指针在文件的开头
- 只读模式打开文件时,就无法用于写入文件
- rb ,二进制格式只读模式
- r +,读写模式,即在读的基础上增加了写的功能,写入文件时,从开头开始编辑会覆盖原有内容
- rb +,二进制读写模式
fp = open('text.txt', 'r+', encoding='utf-8')
写入模式
- w 即 write ,写入模式打开文件,文件存在则打开文件,并从开头开始编辑会覆盖原有内容。⽂件不存在则创建新文件
- 写入模式打开文件时,不能用于读
- wb,二进制格式写入模式
- w +,读写模式。如果是去读,只会得到空字符串,因为原有内容被全部删除。不推荐使用
- wb +,二进制读写模式
fp = open('text.txt', 'wb', encoding='utf-8')fp.write('写入内容')fp.close()
追加模式
- a 即 append ,追加模式,新的内容将会被写入到已有内容之后。文件不存在则创建新⽂件
- 文件存在指针将会放在文件的结尾
- 追加模式打开文件时,不能用于读
- ab,二进制模式追加
- a +,读写追加模式
- ab +,二进制格式追加用于读写
fp = open('text.txt', 'a', encoding='utf-8')fp.write('补充内容')fp.close()
a 与 a+ 的区别在于,a 只能追加写入文件,不可读文件;而 a+ 既可以追加写入文件,也可以读文件。
操作方法
读取
- read(),用于读取文件内容
- 文件对象.read(size ),size 表示从文件中读取数据的长度(单位是字节)。如果不写 size,表示读取文件中所有的数据
- 文件对象.readline(),按照行的方式一次性读取一行内容,如果读取到换行符或文件尾则返回一个空字符串
- 文件对象.readlines(),按照行的方式把整个文件一次性读取,返回一个列表。其中每一行的数据是列表中一个元素,可进行迭代遍历
fp = open('text.txt', 'r', encoding='utf-8')content = fp.read(2)fp.close()
写入
- write(),用于写入文件内容
- 文件对象.write( 内容 )
- 文件对象.writelines(),写入一个字符串列表
fp = open('test1.txt', 'w', encoding='utf-8')fp.write('xxxawa')f.close()
fp = open('text.txt', 'r+', encoding='utf-8')fp.writelines(['hello', 'world'])fp.close()
指针
- 获取指针,tell()
- 用于获取文件指针的位置 ```python fp = open(‘text.txt’, ‘r’, encoding=’utf-8’) text = fp.read(5) print(text) result = fp.tell() print(result)
fp.close()
- **操作指针,seek()**- 用于改变文件指针位置- 文件对象.seek( offset, from ), offset 表示偏移量,from 表示相对位置,相对位置如下:- 0: 表示从文件开头- 1: 表示当前位置- 2: 表示文件结尾```python# 文件内容是 hello worldfp = open('xxx.txt', 'r+', encoding='utf-8')fp.seek(6, 0)text = fp.read()print(text)fp.close()---------------------------------------------->>> world
在 Python3 中,如果 from 的值不是等于 0 ,那么 offset 就必须为 0
高级操作
with…as
with open('text.txt', 'w', encoding='utf-8') as fp:fp.write('test')
with 语句叫做 上下文管理器。该操作表示程序有没有发生异常,都会关闭文件,所以可以不用写 close() 且可以释放资源。建议使用该写法
