「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

执行后显示
新建了一个c.txt文档

当文件路径存在,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

执行后
自动创建了一个新的d.txt

当文件路径存在,a模式不会清空该文件内容并在文件末尾等待填写新内容
e.g

with 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的用法执行了换行添加文本

\n 换行符

文件的操作模式

文本模式(t)

文本模式是文件操作的默认模式(可省略t)
r >>>>> rt
w >>>>>wt
a >>>>>at

  1. 在文本模式下,只能操作文本文件
  2. t 模式下必须指定encoding参数 (如果不填写有可能因为不同系统的默认编码不同产生乱码)
  3. 该模式下的读写都以字符串为单位,其他数据类型不适用
    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 都必须自己指定 不可以省略

  1. 因为计算机的本质就是二进制,所以在该模式下能操作所有类型的文件
  2. 因为encoding参数是用来指定编码的,而二进制已经是计算机的底层语言所以不需要指定encoding参数
  3. 读和写都是以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() 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值