python序列化函数---json和pickle

1.序列化

把对象(变量)从内存中变成可存储或传输的过程称之为序列化

 

2.序列化的好处

(1)持久保存状态

(2)跨平台数据交互

3.json支持跨平台,仅支持python部分序列化

JSON和Python内置的数据类型对应如下

4.json序列化的用法

import json
dic={'name':'egon','age':18}

print(type(json.dumps(dic)))
#将字典序列化到文件中
with open('yxwang.json','w') as f:
    f.write(json.dumps(dic))

#反序列化
with open('yxwang.json','r') as f:
    data=f.read()
    dic=json.loads(data)
    print(dic['name'])

# --------------------------------
dic={'name':'egon','age':18}
#json.dump(序列化对象,序列化的路径文件名)  等同于上面的简写方式
json.dump(dic,open('b.json','w'))
#同理直接打开序列化的内容,直接可以取值
print(json.load(open('b.json','r'))['name'])

 

5.pickle的用法

pickle跟json的用法类似

注意:pickle只适用于python,并且有可能不同版本之间不兼容。因此只能用pickle保存写不重要的数据。

序列化文件中是 pickle类型的 bytes类型

import pickle

dic={'name':'egon','age':18}
#将字典序列化到文件 要以bytes类型写入
print(pickle.dumps(dic))
with open('d.pkl','wb') as f:
    f.write(pickle.dumps(dic))

#同理取值也要用bytes 类型
with open('d.pkl','rb') as f:
    dic=pickle.loads(f.read())
    print(dic['name'])

dic={'name':'egon','age':18}
pickle.dump(dic,open('e.pkl','wb'))

print(pickle.load(open('e.pkl','rb'))['name'])

### 注意  pickle可以序列化任意python类型 包括函数,

### 但是在反解的时候要确保该函数的内存地址依然在内存中,不然会报错,提示函数找不到。

posted @ 2017-08-14 22:44  嘟囔囔小孩  阅读(241)  评论(0编辑  收藏  举报