python成长之路day09

1、with上下文管理
2、b模式
3、+模式
4、文件操作的其他方式

1、with上下文管理

f = open(r’文件路径’,mode=“rt”,encoding=“utf-8”)
data = f.read(内容) #f.write(内容)
f.close()

with open(‘今日内容.txt’,mode=‘rt’,encoding=‘utf-8’)as f1:
data=f1.read()
print(data)

自动调用f1.close()回收操作系统

with open(‘今日内容.txt’, mode=‘rt’, encoding=‘utf-8’) as f1,
open(‘a.txt’, mode=‘rt’, encoding=‘utf-8’) as f2:
print(‘文件1的内容’.center(50, ‘#’))
data = f1.read()
print(data)

print('文件2的内容'.center(50, '#'))
data = f2.read()
print(data)

自动调用f1.close()、f2.close()回收操作系统

2、b模式

bytes
with open(‘a.txt’,mode=‘rt’) as f:
data=f.read()
print(data)
print(type(data))

t模式只能用于读文本文件
with open(‘a.jpg’,mode=‘rt’,encoding=‘utf-8’) as f:
data=f.read()
print(data)
print(type(data))

图片<---------jpg-------二进制数
字符<---------utf-8-------二进制数

b模式可能用于读所有的文件
with open(‘a.jpg’,mode=‘rb’) as f:
data=f.read()
print(data)
print(type(data))

with open(‘a.jpg’, mode=‘rb’) as f:
data = f.read()
print(data.decode(“utf-8”))
print(type(data))

b模式
二进制数

t模式是帮我们解码了
字符<---------utf-8-------二进制数

补充字符编码解码的知识
‘’’
user = input(’>>: ') # user=“林海峰”
user = “林海峰”

编码操作:
字符串=utf-8=》bytes
res=user.encode(“utf-8”)
print(res)
print(type(res))

基于网络发送数据(res)

解码操作:
bytes====》utf-8=====》字符串
print(res.decode(“utf-8”))
‘’’

with open(‘a.jpg’, mode=‘rb’) as src_f,
open(‘b.jpg’, mode=‘wb’) as dst_f:
# data = src_f.read()
# dst_f.write(data)

for line in src_f: # line=文件中的2行内容
    dst_f.write(line)

with open(‘b.txt’, mode=‘wb’) as f:
user = “林海峰”
res=user.encode(‘utf-8’)
f.write(res)

with open(‘b.txt’, mode=‘wt’, encoding=“utf-8”) as f:
user = “林海峰”
f.write(user)

3、+模式

可读可写模式,可以省略t,默认就是t模式,读写都是以字符串为单位
r+t
w+t
a+t

可读可写模式,b模式下读写都是以bytes二进制为单位
r+b
w+b
a+b

with open(‘b.txt’,mode=‘r+t’,encoding=‘utf-8’) as f:
print(f.read())
f.write(“abcdefg”)

with open(‘b.txt’,mode=‘w+t’,encoding=‘utf-8’) as f:
f.write(“我爱你中国”)
print(f.read())

with open(‘b.txt’,mode=‘a+t’,encoding=‘utf-8’) as f:
f.write(“我爱你中国”)
print(f.read())

4、文件操作的其他方式

with open(‘b.txt’, mode=‘rt’, encoding=‘utf-8’) as f:
line1=f.readline()
line2=f.readline()
line3=f.readline()
line4=f.readline()
print(line1,end="")
print(line2,end="")
print(line3,end="")
print(line4,end="")

for line in f:
    print(line)

l = []
for line in f:
    l.append(line)

l = f.readlines()
print(l)

with open(‘b.txt’, mode=‘wt’, encoding=‘utf-8’) as f:
f.write(“1111\n2222\n333\n”)

lines=["1111\n","222\n","333\n"]

for line in lines:
    f.write(line)

f.writelines(lines)

f.writelines({'k1':111,'k2':222,"k3":3333})
f.writelines({'k1':111,1:44444,'k2':222,"k3":3333}) # 报错

f.writelines("hello")
f.write("hello")

with open(r’b.txt’, mode=‘wt’, encoding=‘utf-8’) as f:
print(f.name) #获取的是文件的路径
f.write(‘哈哈哈\n’)
f.flush()

总结:
1、with语法:会自动将文件关闭
with open(“文件地址”,mode=“打开模式”,encoding=“utf-8”)as fp:
code

2、b模式:
新的数据bytes类型,在该模式下不要使用encoding。
在该模式下无论读写都是二进制的结果。
在b模式下,想要写入文本内容,需要先将文本转成二进制,然后再写入

3、+ 模式:
这个模式并不会改变原模式的特点,包括指针

4.文件操作的其他方法:
f.readline() 读取文件内容的一行和for line in f 一样
f.readlines() 读取文件内容的所有
f.flush()因为操作系统IO的时候是攒一波一起放的,flush是直接刷新,将之前内存里的东西给IO了,操作很影响性能,大多数情况下不要用flush

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值