1、It's like JSON,but fast and small

msgpack用起来像json,但是却比json快,并且序列化以后的数据长度更小,言外之意,使用msgpack不仅序列化和反序列化的速度快,数据传输量也比json格式小,msgpack同样支持多种语言。

2、安装

msgpack可以使用pip安装,安装命令如下:

pip install msgpack-python

3、使用

3.1 简单的例子

#coding=utf-8

import datetime

import msgpack

import json

stu = {

'name':'lili',

'age':18,

'score':100

}

#序列化

msg_str = msgpack.packb(stu)

print len(msg_str)

json_str = json.dumps(stu)

print len(json_str)

#反序列化

stu_dict = msgpack.unpackb(msg_str)

print stu_dict

程序的运行结果表明,msgpack序列化后的字符串长度为23,而json模块序列化后的字符串长度为41,接近节省了一半的空间。

3.2 对数据流进行反序列化

msgpack提供了一个Unpacker方法,可以对数据流进行反序列化,下面的代码改自官网的例子

import msgpack

from io import BytesIO

buf = BytesIO()

for i in range(10):

buf.write(msgpack.packb(range(i)))

buf.seek(0)

print type(buf)

unpacker = msgpack.Unpacker(buf)

for unpacked in unpacker:

print unpacked

3.3 区分字符串和二进制

json模块,数据经序列化以后,再反序列化,所得到的数据和序列化之前并不完全一致,如果某个数据之前的类型是str,经过反序列化以后,类型就会变成unicode,msgpack提供了一种方法,可以改变这种现状

#coding=utf-8

import datetime

import msgpack

import json

stu = {

'name':'lili',

u'age':18,

'score':100

}

#序列化

msg_str = msgpack.packb(stu,use_bin_type=True)

json_str = json.dumps(stu)

#反序列化

print msgpack.unpackb(msg_str,encoding='utf-8')

print json.loads(json_str)

最后的输出结果如下

{u'age': 18, 'score': 100, 'name': 'lili'}

{u'age': 18, u'score': 100, u'name': u'lili'}

3.4 自定义类型数据的序列化

msgpack序列化函数提供了一个default参数,反序列化函数提供了一个object_hook,其用法,与上一篇json中的default和objec_thook一样

#coding=utf-8

import datetime

import msgpack

import json

stu = {

'name':'lili',

u'age':18,

'score':100,

"date": datetime.datetime.now()

}

def decode_datetime(obj):

if b'__datetime__' in obj:

obj = datetime.datetime.strptime(obj["as_str"], "%Y-%m-%d%H:%M:%S")

return obj

def encode_datetime(obj):

if isinstance(obj, datetime.datetime):

return {'__datetime__': True, 'as_str': obj.strftime("%Y-%m-%d%H:%M:%S")}

return obj

packed_dict = msgpack.packb(stu, default=encode_datetime)

this_dict_again = msgpack.unpackb(packed_dict, object_hook=decode_datetime)

print this_dict_again

python msgpack_菜鸟世界 -python序列化第2篇---msgpack相关推荐

  1. python基础-菜鸟世界 -python基础---set

    今天介绍基础教程里最后一个数据结构set,也叫集合. 1.概念理解和基础用法 对于集合这个概念,你应该不会陌生,毕竟这玩意高中的数学课上就讲过,如果你都还给老师了,我可以帮你回忆一下.对于集合,我们只 ...

  2. 菜鸟能学python编程,菜鸟学Python编程文章阅读记录一

    菜鸟学Python编程文章阅读记录 看的懵懵懂懂,感觉就是要把代码看懂到,这个代码块做了什么功能,了解到建了属性,定义了方法,这些方法与属性的关系 今天是js逆向专题,这个帖子,回头再好好看 回头再找 ...

  3. python爬虫菜鸟教程-Python 应该怎么学?

    不多BB,直接上干货! 现在很多学校都已经将Python作为入门的编程语言了,在目前特别火的机器学习.人工智能领域,Python可以说是标配的编程语言. 所以我由浅入深的整理了一些Python的资源和 ...

  4. python class namedtuple 效率_菜鸟世界 -python进阶之 namedtuple

    1.namedtuple tuple是不可变序列,当你不希望外界可以随意的改变你的函数返回值的时候,不妨将你的返回值以tuple的形式返回,tuple还可以做为字典的key,这些都是tuple的独到之 ...

  5. python菜鸟教程list_菜鸟世界 -python基础---list(上)

    python有6个序列,最常用的是list ,tuple ,字符串.字符串我们前面已经提到过,但只是粗略的讲解,后面会专门开辟一篇教程来讲解,今天重点讲解list. 在讲解list之前,我们有必要回顾 ...

  6. python基础代码事例-菜鸟世界 -python基础---set

    今天介绍基础教程里最后一个数据结构set,也叫集合. 1.概念理解和基础用法 对于集合这个概念,你应该不会陌生,毕竟这玩意高中的数学课上就讲过,如果你都还给老师了,我可以帮你回忆一下.对于集合,我们只 ...

  7. python进阶免费-菜鸟世界 -python进阶---生成器

    1. 什么是生成器 上一讲是迭代器,生成器本质上也是迭代器,生成器不会把结果保存在序列里,但是会保存生成器的状态,每次迭代时返回一个值,知道遇到StopIteration 时结束 2.获得一个生成器 ...

  8. python经典类新式类_菜鸟世界 -python进阶---新式类与经典类

    1.什么是新式类,什么是经典类 #coding=utf-8 class A: pass class B(object): pass A是经典类,B是新式类,这是Python2.x 里所特有的现象,之所 ...

  9. python爬虫菜鸟教程-Python数据分析,学习路径拆解及资源推荐

    原标题:Python数据分析,学习路径拆解及资源推荐 关于Python数据分析,其实网上能够找到的学习资源很多,主要分为两类: 一类是提供各种资源的推荐,比如书单.教程.以及学习的先后顺序: 另一类是 ...

最新文章

  1. 【C++】用类来处理排序问题
  2. 只要有热情和方法就能学好Linux
  3. 让Dev-C++运行C++程序的控制台窗口等待查看运行结果
  4. Python基础教程:线程操作(oncurrent模块)详解
  5. Hello,SDK!数据采集黑客松大赛重磅开启,Mac投影仪任你拿!
  6. GDCM:gdcm::EncapsulatedDocument的测试程序
  7. gin redis 链接不上_自然的风味,GIN 在杯中
  8. 深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战
  9. 人工智能与图像传感器
  10. 学计算机专业的需要买电脑吗,高三党升级“准大一生”,有必要买电脑吗?学长的回答可以参考...
  11. 【Spring 持久层】Spring 与 Mybatis 整合
  12. javafx-更改程序图标
  13. Java实现机器人用户随机上线
  14. 木聚糖-氨基|Xylan-NH2|木聚糖-聚乙二醇-氨基|氨基-PEG-木聚糖
  15. 安卓在活动左上角添加返回键
  16. 渐变多彩创意双十二活动方案主题PPT
  17. 小米盒子 android tv,小米盒子3 MDZ-16-AA 降级及刷入Android TV系统
  18. python语言单词_python单词_python 单词_python单词书 - 云+社区 - 腾讯云
  19. 最容易读进去的深度学习科普贴
  20. android 2.2(froyo)源码下载

热门文章

  1. 机器人与人工智能领域:协同与协作的区别?
  2. FtpClient获取数据实例
  3. win10亮度_win10系统不好用?学会这些基本操作技巧,小白也能变电脑高手
  4. UML--状态图的基本概念和作用
  5. angular $q promise详解
  6. linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上
  7. html如何将图片做成六边形,CSS实现图片背景填充的六边形的示例代码
  8. data2vec: A General Framework for Self-supervised Learning in Speech,Vision and Language
  9. 产品设计体会(7020)不做没理想的咸鱼“人要是没有理想,和咸鱼有什么区
  10. WorkStation创建linux虚拟机