「Python」文件的读写模式 文件的操作模式 文件操作方法
文件的读写模式
- 只读模式 r(使用该模式打开文件只能读取其内容) open for reading (default)
- 只写模式 w(使用该模式打开文件只能写入内容无法查看) open for writing, truncating the file first
- 只追加模式 a(使用该模式打开文件默认在文件末尾追加新内容) open for writing, appending to the end of the file if it exists
- 以下举例环境均在同一python文件路径下创建了a.txt b.txt
- 并分为两种情况研究各个模式的情况:文件路径不存在、文件路径存在
只读模式(r)
当文件路径不存在,在r模式下直接报错
e.g# 文件路径不存在 with open(r'c.txt', 'r', encoding='utf8') as f: pass #pass语法用于补全python语法 但不执行任何操作
执行后 报错
当文件路径存在,r模式会打开文件等待读取文件内容
e.g# 文件路径存在:r模式会打开文件等待读取文件内容 with open(r'a.txt', 'r', encoding='utf8') as f: print(f.read())
执行后显示a.txt 的内容
只写模式(w)
当文件路径不存在,在w模式会自动创建该文件
e.g# 当文件路径不存在 with open(r'c.txt', 'w', encoding='utf8') as f: pass
执行后显示
当文件路径存在,w模式会清空该文件内容后等待填写新的内容
e.g# 当文件路径存在 with open(r'a.txt', 'w', encoding='utf8') as f: pass
执行后,原a.txt的内容消失
只追加模式(a)
当文件路径不存在,a模式会自动创建该文件
e.g# 当文件路径存在 with open(r'd.txt', 'a', encoding='utf8') as f: pass
执行后
当文件路径存在,a模式不会清空该文件内容并在文件末尾等待填写新内容
e.gwith open(r'b.txt', 'a', encoding='utf8') as f: pass
执行后,b.txt内容不变
在a模式下增加新内容
with open(r'b.txt', 'a', encoding='utf8') as f: f.write('学不死就往死里学\n')
运行两次后
\n 换行符
文件的操作模式
文本模式(t)
文本模式是文件操作的默认模式(可省略t)
r >>>>> rt
w >>>>>wt
a >>>>>at
- 在文本模式下,只能操作文本文件
- t 模式下必须指定encoding参数 (如果不填写有可能因为不同系统的默认编码不同产生乱码)
- 该模式下的读写都以字符串为单位,其他数据类型不适用
e.g
(写)with open(r'b.txt', 'a', encoding='utf8') as f: f.write(1234)
结果报错
(读)
with open(r'b.txt', 'r', encoding='utf8') as f: print(type(f.read()))
结果为
<class 'str'>
二进制模式(b)
在这个模式下 rb wb ab 都必须自己指定 不可以省略
- 因为计算机的本质就是二进制,所以在该模式下能操作所有类型的文件
- 因为encoding参数是用来指定编码的,而二进制已经是计算机的底层语言所以不需要指定encoding参数
- 读和写都是以bytes为单位
二进制模式实操
图片文件的操作
with open(r'XXX.png', 'rb') as f:
print(f.read())
视频文件的操作
with open(r'D:\11\22\01.mp4') as f
print(f.read())
文件操作方法
read(): 一次性读取所有文件内容,读取完后光标会停留在文件末尾,若继续读取,则读取数据为空
with open(r'a.txt','r',encoding='utf8') as f: data = f.read()
当文件较大时,不推荐一次性读取该文件
解决方法如下for line in f: print(line) #文件对象支持for循环1,一次只读取一行
readline(): 一次性只读取一行内容
with open(r'a.txt','r',encoding='utf8') as f: data = f.readline() print(data)
readlines(): 按照行的方式读取所有的文件数据并按照行组织成列表的一个个数据值返回出来
with open(r'a.txt','r',encoding='utf8') as f: data = f.readlines print(data)
readable(): 判断当前文件是否可读
with open(r'a.txt','r',encoding='utf8') as f: print(f.readable()) # True
writable(): 判断当前文件是否可写
with open(r'a.txt','r',encoding='utf8') as f: print(f.writable()) # False
write() : 填写文件内容
with open(r'a.txt','w',encoding='utf8') as f: f.write('xxx')
writelines: 支持填写容器类型数据(内部可存储多个数据值的数据:列表,字典,元组,集合)
with open(r'a.txt','w',encoding='utf8') as f: f,writelines(['John\n, 'jojo\n, 'oscar\n'])
flush() : 类似于主动按了ctrl+s(相当于将内存数据立刻转存到硬盘)
with open(r'a.txt','w',encoding='utf8') as f: f.flush()