序列化:得到一个字符串的结果过程是序列化
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值