序列化模块
序列化:得到一个字符串的结果过程是序列化
json模块
import json
dic={'k1':'v2','k2':'v2'}
ret=json.dumps(dic)
print(ret,type(ret))
dic1=json.loads(ret)
print(dic1,type(dic1))
with open("json.txt","w") as f:
json.dump(dic,f)
with open('json.txt','r')as f1:
c=json.load(f1)
print(c)
json模块的限制:
json格式的key必须是字符串数据类型
如果key为数字,dump之后会强转为字符串数据类型
对元组做value的字典会把元组强转成list类型,且不支持元组做key
可以对数据进行多次dump,但是不能load出来。
想dunp多个数据进入文件,只能用dumps,用loads反序列化
中文格式dumps的第二个数据为ensure_ascii=false
set不能被dump dumps
pickle模块
dump的结果是bytes,dump用的f文件句柄需要以wb格式打开,load需要rb
支持几乎所有的对象序列化
对于对象的序列化需要这个对象的应用类存在内存中
对于多次dump/load的操作进行了量高的处理
import pickle
lst=[1,2,3,4]
dic={1:2}
se=(1,2,3)
with open('2.txt',mode='wb')as f:
pickle.dump(lst,f)
pickle.dump(dic, f)
pickle.dump(se, f)
with open('2.txt',mode='rb')as f:
while True:
try:
print(pickle.load(f))
except EOFError:
break
shelve模块
import shelve
f = shelve.open('shelve_demo')
f['key'] = {'k1':(1,2,3),'k2':'v2'}
f.close()
f = shelve.open('shelve_demo')
content = f['key']
f.close()
print(content)
shelve模块,写定一个文件,改动比较少,读文件操作比较多
且大部分读取都需要基于某个key值来获取某个value值

浙公网安备 33010602011771号