import json
import pickle
"""
序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes(把内存数据存到硬盘上)
序列化
将字符串转为字节byte类型
反序列化
将字节byte转为字符串
"""
json(支持dict,list,tuple,str,set,int)就是每个语言都会有的类型
dict_msg = {'name': '小小',
'age': 18,
'adress': '北京市通州区幸福大街'}
json序列化过程
str_dict_msg = json.dumps(dict_msg)
print(
str_dict_msg) # {"name": "\u5c0f\u5c0f", "age": 18, "adress": "\u5317\u4eac\u5e02\u901a\u5dde\u533a\u5e78\u798f\u5927\u8857"}
print(type(str_dict_msg)) # class 'str'>
json反序列化过程
dict_str_dict_msg = json.loads(str_dict_msg)
print(dict_str_dict_msg) # {'name': '小小', 'age': 18, 'adress': '北京市通州区幸福大街'}
print(type(dict_str_dict_msg)) # <class 'dict'>
json文件序列化(就是将看起来很像dict,list,tuple,str,set,int类型的转为str进行存储)
# f = open('json序列化','w',encoding='utf-8')
# json.dump(dict_msg,f)
# f.close()
json 反序列化(就是将文件中看起来很像dict,list,tuple,str,set,int类型的转为对应 的类型)
# f = open('json序列化','r',encoding='utf-8')
# file_json_load = json.load(f)
# print(file_json_load) # {'name': '小小', 'age': 18, 'adress': '北京市通州区幸福大街'} # <class 'dict'>
# f.close()
pickle同样跟json也是这四种方法
def sum(a, b):
return a + b
pickle序列化
func_sum_pickle_dumps = pickle.dumps(sum)
print(func_sum_pickle_dumps) # b'\x80\x03c__main__\nsum\nq\x00.'
print(pickle.dumps(dict_msg))#b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x06\x00\x00\x00\xe5\xb0\x8f\x
pickle反序列化
loads_func_sum_pickle_dumps = pickle.loads(func_sum_pickle_dumps)
print(loads_func_sum_pickle_dumps) # <function sum at 0x00000000027E01E0>返回的是函数sum的内存地址
print(loads_func_sum_pickle_dumps(1, 2)) # 3
pickle文件序列化
# f = open('pickle序列化', 'wb') # 注意pickle要用二进制方式写入,不要指定编码格式
# pickle.dump(dict_msg, f)
# f.close()
pickle文件反序列化
# f = open('pickle序列化', 'rb')
# # dict_pick_load = pickle.load(f)
# # print(dict_pick_load) # {'name': '小小', 'age': 18, 'adress': '北京市通州区幸福大街'}
# # print(type(dict_pick_load)) #<class 'dict'>
# # f.close()