Python: pickle与msgpack

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值