首页 > 代码库 > 常用文件操作模块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