import sys
import pickle
import msgpack
import json
# 将Python数据转换并保存到pickle格式的文件内。
# with open('data.pickle', 'wb') as f:
# pickle.dump(data, f)
# 数据类型 转换成pickle类型
msg = {
'city': 'shanghai',
'population': 25000000,
'female': 13000000,
'male':12000000
}
print(f" msg size :{sys.getsizeof(msg)} msg type : {type(msg)}")
_pickle = pickle.dumps(msg)
print(f"_pickle size (dict -> pickle)) :{sys.getsizeof(_pickle)}")
print(f"_pickel type :{type(_pickle)}")
# 从pickle格式的文件中读取数据并转换为Python的类型。
# with open('data.pickle', 'rb') as f:
# data = pickle.load(f)
# 将pickle格式的bytes字串转换为Python的类型。
_msg = pickle.loads(_pickle)
print(f"pickle -> dict: {_msg}")
# 序列化
print(f"msgpack test")
print(f"dict -> json")
msg_json = json.dumps(msg)
print(f"msg_json : {msg_json}")
msg_serlizalied = msgpack.packb(msg)
msg_json_serlizalied = msgpack.packb(msg_json)
print(f"msg size: {sys.getsizeof(msg)}")
print(f"msg_serlizalied size: {sys.getsizeof(msg_serlizalied)}")
print(f"msg_json_serlizalied size: {sys.getsizeof(msg_json_serlizalied)}")
# 反序列化
msg_json_deserlized = msgpack.unpackb(msg_serlizalied, use_list=False)
msg_dict_deserlized = msgpack.unpackb(msg_json_serlizalied, use_list=False)
print(f"msg_json_deserlized:{msg_json_deserlized}")
运行结果:
msg size :232 msg type : <class 'dict'>
_pickle size (dict -> pickle)) :111
_pickel type :<class 'bytes'>
pickle -> dict: {'city': 'shanghai', 'population': 25000000, 'female': 13000000, 'male': 12000000}
msgpack test
dict -> json
msg_json : {"city": "shanghai", "population": 25000000, "female": 13000000, "male": 12000000}
msg size: 232
msg_serlizalied size: 86
msg_json_serlizalied size: 117
msg_json_deserlized:{'city': 'shanghai', 'population': 25000000, 'female': 13000000, 'male': 12000000}
我个人的尝试结果是,pickle的效率要略好于msgpack。