码迷,mamicode.com
首页 > Web开发 > 详细

常用文件操作模块json,pickle和shelve

时间:2017-05-17 15:18:32      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:技术分享   内存   src   二进制   通过   png   .text   log   strong   

一、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 = 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多次


 
 



 
 

常用文件操作模块json,pickle和shelve

标签:技术分享   内存   src   二进制   通过   png   .text   log   strong   

原文地址:http://www.cnblogs.com/zj-luxj/p/6867440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!