json模块与pickle模块

用来传输数据

序列化:把对象(变量)从内存中变成可存储或传输的过程称之为序列化,这个序列化必须得规定格式,我们保存的格式为json文件

反序列化:把json文件从硬盘中读取出来

json文件并不是Python独有的,所有的语言都有json,所有json可以跨平台/语言进行传输数据。在python中只能写入的dict/list/str/int/float/bool/None类型

pickle支持python中任意数据类型,所以不能跨平台使用(因为不同平台的函数不同),并且pickle序列化的过程中是以二进制的形式转化

json

import json
dict = {'name':'nick'}
res = json.dumps(dict)    # 在内存中写数据
print(res,type(res))    

{"name": "nick"} <class 'str'>

res2 = json.loads(res)    # 在内存中读数据
print(res2,type(res2))

{'name': 'nick'} <class 'dict'>

dict = {'name':'nick'}
# 在文件中写数据,生成test.json文件
with open('test.json', 'w', encoding='utf8') as fw:
    json.dump(dict, fw)

# 在文件中读数据
with open('test.json', 'r',encoding='utf8') as fr:
    data = json.load(fr)
print(data)

{'name': 'nick'}

pickle

import pickle
dict = {'name':'nick'}
res = pickle.dumps(dict)    # 在内存中以二进制的形式写数据
print(res)

b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00nickq\x02s.'

res2 = pickle.loads(res)    # 在内存中读数据
print(res2)

{'name': 'nick'}

dict = {'name':'nick'}
# 因为是以二进制的形式,所以要用wb模式写入test.pkl中,不用指定字符编码
with open('test.pkl', 'wb') as fw:    
    pickle.dump(dict, fw)

# 用rb模式读取test.pkl中数据,不用指定字符编码
with open('test.pkl', 'rb') as fr:    
    data = pickle.load(fr)
print(data)

{'name': 'nick'}

posted @ 2019-11-13 20:08  Never&say&die  阅读(127)  评论(1编辑  收藏  举报