模块 json 和 pickle

序列化

序列:字符串

序列化:将其它数据类型转换成字符串的过程。

反序列化:字符串转成其它数据类型。

序列化的目的

1:以某种存储形式使用自定义对象持久化。

2:将对象从一个地方传递到另一个地方。

3:是程序更具有维护性。

json 和 pickle 模块

用于序列化的两个模块

json,用于字符串和 python 数据类型间进行转换。

pickle,用于 python 特有的数据类型和 python 的数据类型进行转换。

注意:pickle 仅用于 python

  • json
# dumps 和 loads
import json

dic = {'a':1,'b':2,'c':3}
res = json.dumps(dic) # 序列化:将一个字典转换成一个字符串
print(res,type(res))
# {"a": 1, "b": 2, "c": 3} <class 'str'>
res1 = json.loads(res) # 反序列化:将一个字符串格式的字典转换成一个字典
# 注意:要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示。
print(res1,type(res1))
# {'a': 1, 'b': 2, 'c': 3} <class 'dict'>

# 也可处理嵌套的数据类型
lis = [1,2,['a','b','c'],3,{'k1':'a','k2':'b','k3':'c'}]
res = json.dumps(lis)
print(res)
# [1, 2, ["a", "b", "c"], 3, {"k1": "a", "k2": "b", "k3": "c"}]
res1 = json.loads(res)
print(res1)
# [1, 2, ['a', 'b', 'c'], 3, {'k1': 'a', 'k2': 'b', 'k3': 'c'}]
# dump 和 load
import json

dic = {'name':'zkim','age':18,'hobby':'running'}
with open('user_info','w',encoding='utf-8')as f:
    json.dump(dic,f)
# dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件

with open('user_info','r',encoding='utf-8')as f:
    res = json.load(f)
    print(res)
# load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
  • pickle
import pickle

# dumps 和 loads
dic = {'name':'zkim','hobby':'running'}
str_dic = pickle.dumps(dic)
print(str_dic) # 一串二进制

str_dic1 = pickle.loads(str_dic)
print(str_dic1) 
# {'name': 'zkim', 'hobby': 'running'}


# dump 和 load
with open('userinfo.txt','wb')as f:
    pickle.dump(dic,f)
with open('userinfo.txt','rb')as f:
    res = pickle.load(f)
    print(res)
# {'name': 'zkim', 'hobby': 'running'}
posted @ 2019-08-09 21:16  光吃葡萄皮  阅读(159)  评论(1编辑  收藏  举报
回顶部