Python的pickle序列化对象保存

大家知道有时候我们想保存一些序列化的信息,比如字典、列表任何在程序里出现的东西。但是这些内容如果保存在txt也就是字节保存,然后返回后就是字节了。
比如 一个 列表 list = [1,2,3] 保存到txt,然后读取回来 就成了 "list = [1,2,3] "字符串了 ,无法以原有的格式使用了。
Python 有一个pickle序列化对象保存功能可以帮你保存对象却不失去原汁原味的功能。

(pickle支持python的所有数据类型哦~!!~)

#保存序列化####
import pickle

data = {
    'a': [1, 2.0, 3, 4+6j],
    'b': ("character string", b"byte string"),
    'c': {None, True, False}
}
 
with open('mydata.pickle', 'wb') as myfile:
    pickle.dump(data, myfile, pickle.HIGHEST_PROTOCOL)



#####读取序列化####
import pickle
 
with open('mydata.pickle', 'rb') as myfile:
    data = pickle.load(myfile)
    print  (data['b']) #注意这里是下标b对应字典里的b

#-》》('character string', b'byte string')

但是 但是 但是 !!重要的事情说三遍!!三遍! 三遍!

pickle可以保存所有的数据类型 可以直接读取并修改值,但是如果你要保存一个类经过下边几步:
1.实例化类
2.保存这个实例化

读取!!!!步骤:
1.先复现原有的类结构
2.实例化类
3.读取这个实例化
4.可以根据属性名 self.后边的xxx 修改属性值!!

#举例子 
#如下是需要保存的类
class Config:
	def __init__(self):
 		self.verbose = True
 		self.network = 'vgg'
 		self.use_horizontal_flips = False
		self.use_vertical_flips = False
		self.rot_90 = False

#实例化 要保存的类
C = Config()

#保存类
with open('abc.pickle',  'wb') as fn:
    pickle.dump(C,fn)

#读取类
with open('abc.pickle', 'rb') as fn:
    CC = pickle.load(fn)
print (CC.class_mapping) 
CC.verbose = [XXX]#这里直接修改