Python Json、Pickle和shelve(序列化)
1.Json模块
1.1 json格式存放数据
import json dict={'name':'GYC','age':'18'} data=json.dumps(dict) f=open('test.txt','w',encoding='utf8') f.write(data) f.close() #当前目录下生成一个test.txt文本,内容像dict
1.2 json格式取数据
f=open('test.txt','r',encoding='utf8') data=f.read() data=json.loads(data) print(data['name'])
1.3 json对函数和类无法序列化
2.pickle模块
可以对函数和类进行序列化
2.1 pickle 存数据
import pickle def foo(): print('ok') data=pickle.dumps(foo) f=open('test.txt','wb') f.write(data) f.close()
2.2 pickle取数据
f=open('test.txt','rb') data=f.read() data=pickle.loads(data) data() f.close()
取数据时,由于转换后的data对象所指向的内存地址已经更改,故如果想要data函数执行成功,则需要在本地存在相同的函数
总结:在p文件中以pickle存取数据时,写入与读取的格式均为“字节”形式,不能以字符串格式读取写入
dump和load方法,以pickle为例,json与pickle用法相同
data=pickle.load(f) #相当于 data=f.read() data=pickle.loads(data) pickle.dump(foo,f) #相当于 data=pickle.dumps(foo) f.write(data)
3.shelve模块
shelve存取数据
import shelve f=shelve.open('test2.txt') f['info']={'name':'alex','age':'18'} data=f.get('info') print(data) #{'name': 'alex', 'age': '18'}
补充知识
字典取值
d={'name':'alex'}
data=d.get('name')
print(data)
data=d.get('age','18') #默认值 print(data)
当使用get函数时,如果存在值则取值,不存在且没有默认值时返回None,存在默认值则返回默认值
浙公网安备 33010602011771号