标签:技术分享 内存 src 二进制 通过 png .text log strong
一、json 和 pickle模块
用于序列化的两个模块
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
例子:
json序列化:
import json
info = {
‘name‘:‘lxj‘,
‘age‘:27
}
with open(‘text.json‘,‘w‘) as f:
f.write(json.dumps(info)) #这句话等同于json.dump(info,f)
把内容写到文件中
json反序列化:
import json
with open("text.json",‘r‘) as f:
data = json.loads(f.read()) #这句话等同于data = json.load(f)
print(data.get(‘age‘)) #不用做任何转换就可以读取字典,读取字典age内容 27
json总结:json在所有语言都通用,只能保存简单数据类型,如字典、列表、字符串。像函数、类则不能存储。这里注意只dump一次(虽然可以dump多次,但别这么用),只load一次(在3.x模式下)
pickle序列化
pickle:只能在python中用,用法与上面一致,可以序列化函数、类
如:
pickle序列化:
import pickle
def sayhi(name):
print("name is %s"%name)
info = {
‘name‘:‘lxj‘,
‘age‘:28,
"func":sayhi #序列化sayhi函数对象
}
with open(‘text.text‘,‘wb‘) as f: #这里注意要用二进制模式写。
pickle.dump(info,f)
pickle反序列化:
import pickle
def sayhi(name): #在pickle序列化时,是序列化整个对象。伴随程序运行完结束,sayhi指向的内存地址就释放了。我们这里再调用就会出错,所以一定要定义sayhi函数,我们调用func()才有用。没什么用。
print("name is %s"%name) #函数体可以变成其他内容
with open("text.text",‘rb‘) as f: #这里注意要用二进制模式读。,
data = pickle.load(f)
print(data.get(‘func‘)(‘lxj‘)) #运行函数
二、shelve模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
shelve模块写:
import shelve
f = shelve.open(‘shelve_text‘) #这里注意文件名不能加后缀(如.text,.json都是不行的)
names = ["lxj","sx"]
infos = {
‘name‘:‘lxj‘,
‘age‘:27
}
f[‘name‘] = names
f[‘info‘] = infos
执行完成后会生成三个文件,
shelve模块读:
import shelve
f = shelve.open(‘shelve_text‘)
print(f[‘name‘])
print(f[‘info‘])
总结:相当于可以dump多次,load多次
标签:技术分享 内存 src 二进制 通过 png .text log strong
原文地址:http://www.cnblogs.com/zj-luxj/p/6867440.html