首页 > 代码库 > 常用文件操作模块json,pickle和shelve
常用文件操作模块json,pickle和shelve
一、json 和 pickle模块
用于序列化的两个模块
- json,用于字符串 和 python数据类型间进行转换
- pickle,用于python特有的类型 和 python的数据类型间进行转换
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 = http://www.mamicode.com/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 = http://www.mamicode.com/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多次
常用文件操作模块json,pickle和shelve
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。