0.     前期准备
官方protobuf定义

https://code.google.com/p/protobuf/

python使用指南
https://developers.google.com/protocol-buffers/docs/pythontutorial
http://blog.csdn.net/love_newzai/article/details/6906459
安装 python对protobuf的支持
wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.bz2
tar -vxjf protobuf-2.5.0.tar.bz2
cd protobuf-2.5.0
./configure --prefix=/home/admin/mypython/
make ; make install
1     准备.proto文件
struct_oss_pb.proto
message entity_attr
{
    required int32 attr_id = 1;            // 属性类型标识,比如:标题属性为 1,正文属性为2,图片属性为 3,发现时间属性为4,原始url属性为5 ,父页面属性为 6;
    required bytes attribute = 2;      // 属性类型描述,比如“标题”,“ 正文”,“图片”,“发现时间”,“原始 url”,“父页面 ”等
    repeated bytes value = 3;            // 属性值,除“图片”只保留 osskey之外,其他保留原文。考虑到文章中会保留多幅图,所以采用repeated。
};

message entity_desc
{
    required int32 entity_id = 1;                           // 实体类型标识,比如:新闻为 1,小说为2 。
    required bytes entity_name = 2;                  // 实体名称,比如:新闻主题事件关键词,小说名等。
    repeated entity_attr attributes = 3;   // 属性描述,格式见entity_attr。

};
2.     将proto转化为 xxx_pb2.py ,然后在你的程序里import这个py
protoc  ./struct_oss_pb.proto  --python_out=./

得到struct_oss_pb_pb2.py

3.     读写protobuf的示例python

if __name__ == '__main__':
    entitydesc = struct_oss_pb_pb2.entity_desc()
    entitydesc.entity_id = 1
    entitydesc.entity_name = 'haha'
    #create proto
    entityattr = entitydesc.attributes.add()
    entityattr.attr_id = 11
    entityattr.attribute = 'title'.decode('gbk').encode('utf-8')
    entityattr.value.append("title adfadf")
    print entitydesc
    print entityattr

Protobuf 的优点

Protobuf 有如 XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。只需使用 Protobuf 对数据结构进行一次描述,即可利用各种不同语言或从各种不同数据流中对你的结构化数据轻松读写。

它有一个非常棒的特性,即“向后”兼容性好,人们不必破坏已部署的、依靠“老”数据格式的程序就可以对数据结构进行升级。这样您的程序就可以不必担心因为消息结构的改变而造成的大规模的代码重构或者迁移的问题。因为添加新的消息中的 field 并不会引起已经发布的程序的任何改变。

Protobuf 语义更清晰,无需类似 XML 解析器的东西(因为 Protobuf 编译器会将 .proto 文件编译生成对应的数据访问类以对 Protobuf 数据进行序列化、反序列化操作)。

使用 Protobuf 无需学习复杂的文档对象模型,Protobuf 的编程模式比较友好,简单易学,同时它拥有良好的文档和示例,对于喜欢简单事物的人们而言,Protobuf 比其他的技术更加有吸引力。

Protobuf 的不足

Protbuf 与 XML 相比也有不足之处。它功能简单,无法用来表示复杂的概念。

XML 已经成为多种行业标准的编写工具,Protobuf 只是 Google 公司内部使用的工具,在通用性上还差很多。

由于文本并不适合用来描述数据结构,所以 Protobuf 也不适合用来对基于文本的标记文档(如 HTML)建模。另外,由于 XML 具有某种程度上的自解释性,它可以被人直接读取编辑,在这一点上 Protobuf 不行,它以二进制的方式存储,除非你有 .proto 定义,否则你没法直接读出 Protobuf 的任何内容【 2 】。

python读写protobuf相关推荐

  1. python读写压缩文件使用gzip和bz2

    python读写压缩文件使用gzip和bz2 #读取压缩文件 # gzip compression import gzip with gzip.open('somefile.gz', 'rt') as ...

  2. python读写二进制文件(读写字节数据)

    python读写二进制文件(读写字节数据) 你想读写二进制文件,比如图片,声音文件等就是常见的二进制文件. 使用模式为 rb 或 wb 的 open() 函数来读取或写入二进制数据.比如: # Rea ...

  3. python 读写 csv

    python 读写 csv 列表写入csv # 列表写入csv import csvheaders = ['列1', '列2', '列3', '列4', '列5']rows = [["1行1 ...

  4. python读写csv时中文乱码问题解决办法

    参考1 参考2 参考3 CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和 ...

  5. python输出csv文件中文乱码-python读写csv时中文乱码问题解决办法

    CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和文本编辑器等打开.CSV ...

  6. python文件对象提供了3个读方法、分别是-Python读写文件模式和文件对象方法实例详解...

    本文实例讲述了Python读写文件模式和文件对象方法.分享给大家供大家参考,具体如下: 一. 读写文件模式 利用open() 读写文件时,将会返回一个 file 对象,其基本语法格式如: open ( ...

  7. python处理excel表格数据-零基础使用Python读写处理Excel表格的方法

    引 由于需要解决大批量Excel处理的事情,与其手工操作还不如写个简单的代码来处理,大致选了一下感觉还是Python最容易操作. 安装库Python环境 首先当然是配环境,不过选Python的一个重要 ...

  8. 使用python用什么软件-Python读写Excel表格,就是这么简单粗暴又好用

    Python读写Excel表格,就是这么简单粗暴又好用 2019-04-18 13:45:31 11点赞 107收藏 1评论 最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开 ...

  9. python文件读取输出-Python 读写文件中数据

    1 需求 在文件 h264.txt 中的数据如图1,读入该文件中的数据,然后将第1列的地址删除,然后将数据输出到h264_out.txt中: 图1 h264.txt 数据截图 图2 输出文件 h264 ...

最新文章

  1. 使用ioctl向linux内核传递参数的方法实例
  2. 类型的本质和函数式实现
  3. [c/c++] programming之路(7)、数据类型转换、偷钱小程序、进制转换
  4. [蓝桥杯][算法提高VIP]分苹果(差分||树状数组)
  5. IOS之学习笔记十四(协议的定义和实现)
  6. 'qapplicationapp'在此作用域中尚未声明 linux,qt 编译问题总结
  7. mr读取mysql_新增访客数量MR统计之MR数据输出到MySQL
  8. mybatisplus修改单个属性_SolidWorks工程图比例:整体修改与单视图修改
  9. MySQL数据教程(一)数据库概念,超详细安装和配置数据库,数据库可视化界面介绍
  10. 测试能用的上的录屏软件 不喜勿喷
  11. Python机器学习:Grid SearchCV(网格搜索)
  12. java 微信公众号微信支付
  13. 如何写出一篇好的软文?软文撰写的一些注意事项!
  14. SCI 投稿全过程信件模板一览
  15. vscode开启鼠标滚轮缩放字体大小设置
  16. RabbitMQ五种工作模式
  17. 【历史上的今天】3 月 14 日:微软发布 IE9;黑莓创始人出生;圆周率计算创造新纪录
  18. windows配置c语言开发环境
  19. Git 相关配置 用户名、邮箱
  20. 计算机归属应用软件的有,2017大学计算机应用基础试题附答案

热门文章

  1. python--实现Lorenz 63模式
  2. 移相器——移相器介绍
  3. 几百套AE模板企业片头动画
  4. 怎样制作FL Studio步进音序器中的节奏
  5. java UDP 编程
  6. 电脑可以ping通,能上QQ等软件,但是不能打开网页,解决方法
  7. 科技新品 | 卡西欧高性能金属腕表;佳能大幅面打印机;三星2亿像素传感器
  8. 智慧消防水远程监测解决方案
  9. Python3抓取Bing每日图片做桌面背景,并设置为开机更新背景
  10. loo-cv验证matlab,高光谱成像系统的基本原理,高光谱成像技术在红肉食用品质中的应用进展...