- 用于序列化的两个模块
json:用于字符串和Python数据类型间进行转换
pickle: 用于python特有的类型和python的数据类型间进行转换
json提供四个功能:dumps,dump,loads,load
pickle提供四个功能:dumps,dump,loads,load
- pickle可以存储什么类型的数据呢?
(1) 所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。
(2) 由任何原生类型组成的列表,元组,字典和集合。
(3) 函数,类,类的实例 - pickle模块中常用的方法有:
(1)dump() 方法,用于将数据进行序列化并写入文件,当dump() 方法的protocol 参数为True 时可以实现压缩的效果
语法
pickle.dump(obj, file, protocol=None,)
参数
obj表示将要封装的对象
file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb”
ex. 使用 pickle模块写入二进制文件
#导入模块
import pickle
#准备要序列化的数据
lst = [[1,2,3],[4,5,6],[7.8,9]]
tu = (-5,10,8)
coll = {4,5,6}
dic = {'a':'apple','b':'banana','g':'grape','o':'orange'}
#以写模式打开二进制文件
f = open('StaticVarDataFile','wb')
try:
pickle.dump(lst,f) #写入列表
pickle.dump(tu,f) #写入元组
pickle.dump(coll,f) #写入集合
pickle.dump(dic,f) #写入字典
except:
print('写文件异常')
finally:
f.close()
(2) load() 用于读取二进制文件内容并进行反序列化,还原为原来的信息
语法
pickle.load(file,*,fix_imports=True, encoding="ASCII", errors="strict")
参数
file必须以二进制可读模式打开,即“rb”,其他都为可选参数
ex. 使用 pickle 模块读取上例写入二进制文件的内容
#导入模块
import pickle
#打开二进制文件
f = open('StaticVarDataFile','rb')
n1 = pickle.load(f)
n2 = pickle.load(f)
n3 = pickle.load(f)
n4 = pickle.load(f)
print(n1) #读取文件中数据
print(n2) #读取文件中数据
print(n3) #读取文件中数据
print(n4) #读取文件中数据
运行结果
(3) dumps(obj) 方法,以字节对象形式返回封装的对象,不需要写入文件中
import pickle
print(pickle.dumps([1,2,3]))
#b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
(4) loads(bytes_object): 从字节对象中读取被封装的对象,并返回
import pickle
str_byte = b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
print(pickle.loads(str_byte))
#[1,2,3]
网友评论