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,存在默认值则返回默认值

posted on 2018-01-16 00:53  可爱的春哥  阅读(101)  评论(0)    收藏  举报

导航