1.with上下文管理器:为了突出其作用,我们首先来对比正常的文件读写和使用with语句进行文件读写的差别。
f = open("File.txt","w")
f.write("Hello World")
f.close()
#正常的三个步骤,打开文件,操作文件,关闭文件
with open("file.txt", "w") as file:
file.write("Hello World")
#而使用with语句时,上下文管理器完成了关闭文件的任务
使用上下文管理器最大的优势就是能确保资源的释放,可以在文件使用完毕后,避免手动调用close()带来的资源泄漏问题。
2.pickle模块:解决了永久储存python对象的问题,允许将字符串、列表、字典等对象保存为文件的形式,是一个将python对象序列化的过程(将python对象转换为二进制字节流的过程)
import pickle
x, y, z = 1, 2, 3
s = "Cloud"
l = ["star", 2, 3.14]
d = {"one": 1, "two": 2}
with open("data1.pkl", "wb") as f:
pickle.dump(x, f)
pickle.dump(y, f)
pickle.dump(z, f)
pickle.dump(l, f)
pickle.dump(d, f)
pickle.dump(s, f)
通过dump函数,将对象传入,通过文本文件打开对应的pkl文件得到以下乱码
€K.€K.€K.€? ]??star擪G@ 窺雲e.€? }??one擪?two擪u.€? ?Cloud?
接着我们可以通过load()方法进行读取,读取pkl这个二进制文件。
import pickle
with open("data1.pkl", "rb") as f:
x = pickle.load(f)
y = pickle.load(f)
z = pickle.load(f)
l = pickle.load(f)
d = pickle.load(f)
s = pickle.load(f)
print(x, y, z, l, d, s, sep='\n')
## 1
## 2
## 3
## ['star', 2, 3.14]
## {'one': 1, 'two': 2}
## Cloud
为化简代码,我们还可以用元组的形式将对象打包
import pickle
x, y, z = 1, 2, 3
s = "Cloud"
l = ["star", 2, 3.14]
d = {"one": 1, "two": 2}
with open("data1.pkl", "wb") as f:
pickle.dump((x, y, z, l, d, s), f)
读取时也应该用元组的形式进行解包
import pickle
with open("data1.pkl", "rb") as f:
x, y, z, l, d, s = pickle.load(f)
print(x, y, z, l, d, s, sep='\n')
## 1
## 2
## 3
## ['star', 2, 3.14]
## {'one': 1, 'two': 2}
## Cloud