我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python读写protobuf

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python读写protobuf

From: http://blog.sina.com.cn/s/blog_7575a6190101u86f.html


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 --python_out=./ ./struct_oss_pb.proto

得到struct_oss_pb_pb2.py

3.     读写protobuf的示例python
test_pb.py

01 # coding: gbk
02 import struct_oss_pb_pb2
03 entitydesc=struct_oss_pb_pb2.entity_desc()
04 entitydesc.entity_id=1
05 entitydesc.entity_name='haha'
06 
07 #create proto  
08 entityattr=entitydesc.attributes.add() #嵌套message
09 entityattr.attr_id = 11
10 entityattr.attribute = '标题'.decode('gbk').encode('utf-8')
11 entityattr.value.append("title adfadf")  
12 
13 entity_attr_str=entityattr.SerializeToString()  
14 print entity_attr_str
15 entitydesc_str=entitydesc.SerializeToString()  
16 print entitydesc_str    
17 print '----'
18 #read
19 entityattr2 = struct_oss_pb_pb2.entity_attr()
20 entityattr2.ParseFromString(entity_attr_str)
21 print entityattr2.attr_id    
22 print entityattr2.attribute.decode('utf-8').encode('gbk')
23 for i in entityattr2.value:
24    print i
25    
26 print '----'
27 entitydesc2=struct_oss_pb_pb2.entity_desc()
28 entitydesc2.ParseFromString(entitydesc_str)    
29 print entitydesc2.entity_id
30 #repeated entity_attr attributes,由于是repeated需要遍历
31 for oneatt in entitydesc2.attributes:
32    print oneatt.attr_id
33    for i in oneatt.value:
34        print i




Protobuf定义了一套基本数据类型。几乎都可以映射到C++\Java等语言的基础数据类型.

      

protobuf 数据类型

描述

打包

C++语言映射

bool

布尔类型

1字节

bool

double

64位浮点数

N

double

float

32为浮点数

N

float

int32

32位整数、

N

int

uint32

无符号32位整数

N

unsigned int

int64

64位整数

N

__int64

uint64

64为无符号整

N

unsigned __int64

sint32

32位整数,处理负数效率更高

N

int32

sing64

64位整数 处理负数效率更高

N

__int64

fixed32

32位无符号整数

4

unsigned int32

fixed64

64位无符号整数

8

unsigned __int64

sfixed32

32位整数、能以更高的效率处理负数

4

unsigned int32

sfixed64

64为整数

8

unsigned __int64

string

只能处理 ASCII字符

N

std::string

bytes

用于处理多字节的语言字符、如中文

N

std::string

enum

可以包含一个用户自定义的枚举类型uint32

N(uint32)

enum

message

可以包含一个用户自定义的消息类型

N

object of class



免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python读写protobuf

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python读写protobuf

From: http://blog.sina.com.cn/s/blog_7575a6190101u86f.html0.     前期准备官方protobuf定义https://code.google.com/p/protobuf/pyth
2023-01-31

Python读写Excel

读Excel1 #打开Excek,xlsfile为Excel路径+文件名2 boorRead = xlrd.open_workbook(xlsfile)3 #读取sheet,sheet_name为Excel中sheet的名称4 sheet
2023-01-30

Python: 读写Excel(open

项目周报汇报的时候要做数据汇总,总是要从不同的excel文件中去获取数据最后汇总到一个excel表里面,所以决定用python直接写个自动化脚本来自动执行。用python来读写excel,目前找了2个方法:win32com.client和o
2023-01-31

python读写串口

#!/usr/bin/pythonimport serialfrom time import sleepser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.5) print ser.por
2023-01-31

python读写文件

python 文件操作本文系海特网编程技术斑竹Cute所发表,版权归海特网与Cute所有,转载请保留完整信息#打开文件和进行写操作f=open('test.txt','w')f.write('hello')f.writelines(['hi
2023-01-31

Python文件读写

python文件读写读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求
2023-01-31

python 如何使用 protobuf

一、protobuf是什么protocol buffer(简称protobuf)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都
2023-01-31

Python读写properties文件

最近用python写个工具,涉及到properties文件的读写操作。发现Python并没有提供操作properties文件的库,只有一个 ConfigParser 类来支持 .ini 文件的读写,这显然不是我想要的,于是一番折腾后整出下面
2023-01-31

用Python读写PowerPoint文

import win32com from win32com.client import Dispatch, constants ppt = win32com.client.Dispatch('PowerPoint.Application')
2023-01-31

python读写excel文件

项目中需要生成excel表格,在网上查了一些资料后,整理记录下。1. 读excel表格 1 ''' 2 读取XLS,XLSX文件 3 ''' 4 def readExcelFile(filename): 5 # 打开工作表 6
2023-01-30

Python 3.5 读写文件

在Python中读写文件不需要像Java或.Net一样要另外导入io"包",可直接使用open方法open() 返回一个文件对象,并且通常使用两个参数:open(filename, mode)>>>f = open('youfile', '
2023-01-31

python之读写文件

在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件
2023-01-30

Python 7.1 文件读写

文件读写文件读写是我们最常见的IO操作。Python内置了文件读写的函数,用法和C是兼容的。读写文件前,我们必须先了解下,在磁盘上读写文件的功能是由操作系统实现的,现代操作系统不允许普通程序操作磁盘,所以,读写文件就是请求操作系统打开一个文
2023-01-31

Python读写CSV文件

csv模块方法csv.readerimport csv   with open('temp.csv','rb') as f:        reader = csv.reader(f)        for row in reader:  
2023-01-31

Python 序列化之 ProtoBuf

ProtoBuf: 是一套完整的 IDL(接口描述语言),出自Google,基于 C++ 进行的实现,开发人员可以根据 ProtoBuf 的语言规范生成多种编程语言(Golang、Python、Java 等)的接口代码,本篇只讲述 Pyth
2023-01-31

【Python】Python读写文件操作

原帖地址:http://blog.csdn.net/adupt/article/details/44356151.open使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录