PYTHON读写PB
PYTHON读写PB
前期准备
-
官方protobuf定义:
-
python使用指南:
1.https://developers.google.com/protocol-buffers/docs/pythontutorial
2.http://blog.csdn.net/love_newzai/article/details/6906459 -
安装 python对protobuf的支持:
1.wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.bz2
2.tar -vxjf protobuf-2.5.0.tar.bz2
3.cd protobuf-2.5.0
4../configure --prefix=/home/admin/mypython/
5.make ; make install
准备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。
};
当时在使用的时候,如果将字段设置为optional
并设置为0的话,那么在传输的过程中protobuf就会将这个字段取消掉,囧。但是JAVA就没有这个问题。
将proto转化为 xxx_pb2.py ,然后在你的程序里import这个py
protoc --python_out=./ ./struc_oss_pb.proto
得到struct_oss_pb_pb2.py
读写PROTOBUF
# coding: gbk
import struct_oss_pb_pb2
entitydesc=struct_oss_pb_pb2.entity_desc()
entitydesc.entity_id=1
entitydesc.entity_name='haha'
#create proto
entityattr=entitydesc.attributes.add() #嵌套message
entityattr.attr_id = 11
entityattr.attribute = '标题'.decode('gbk').encode('utf-8')
entityattr.value.append("title adfadf")
entity_attr_str=entityattr.SerializeToString()
print entity_attr_str
entitydesc_str=entitydesc.SerializeToString()
print entitydesc_str
当初用PROTOBUF进行RPC通信,时间长了也忘光了,最近发现网上有一个项目:
http://www.grpc.io/docs/tutorials/basic/python.html
回头看看,再补充下
posted on 2016-06-06 13:37 walkwalkwalk 阅读(5573) 评论(0) 编辑 收藏 举报