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()
posted on 2020-04-04 23:27  python我学的很菜  阅读(200)  评论(0编辑  收藏  举报