protobuf是python在自带的一个软件, 用 conda install protobuf 安装就可以
用pip show protobuf 查看是否安装成功
如果: protoc --version 命令找不到指定文件参考如下链接设置:
https://www.cnblogs.com/oracleloyal/p/5485432.html
主要是在profile文件中增加如下配置
export PATH=$PATH:/root/anaconda3/bin
export PKG_CONFIG_PATH=/root/anaconda3/lib/pkgconfig
1. 配置.proto 文件, 大概格式如下:
(1)对象定义的话,都是message 开始, 这种在py文件中调用时,需要先初始化添加对象,
address_book = addressbook_pb2.AddressBook() ## 添加对象
person = address_book.people.add() ## 添加一个对象的主题
(2)格式:所有的数据都定义在一个message里面,数据的类型可以是bool,int32,float,double,string类型,也可以是枚举类型(enum),
定义数据前必须指定限制字required,optional,或repeated
2. #message 定义案例
//specify the proto version
syntax = "proto2"; // 注意这里用的是2, 如果是3个话,好像optional 这个明明有问题
//the name(or empty)
package tutorial;
message Person {
required string name = 1; //后面的1,2,3 表示字段的位置
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phones = 4; //repeate 类似数组,里面可以存放多个PhoneNumber 可自定义类型
}
message AddressBook {
repeated Person people = 1;
}
3. 生成python 协议文件.py格式
protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/addressbook.proto
其中: $SRC_DIR 表示.proto存放的路径
$DST_DIR表示生成的.py协议文件所在的路径
如:protoc -I=./ --python_out=./ ./addressbook.proto ## ./表示当前路径
4. 利用协议文件尽心格式转换
#序列化
#stuff_serial = stuff1.SerializeToString()
#反序列化
#stuff_unserial =stuff1.ParseFromString()
## 序列化数据,生成序列化文件
import addressbook_pb2
import sys
address_book = addressbook_pb2.AddressBook() ## 添加对象
### 最后
不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~
给大家准备的学习资料包括但不限于:
Python 环境、pycharm编辑器/永久激活/翻译插件
python 零基础视频教程
Python 界面开发实战教程
Python 爬虫实战教程
Python 数据分析实战教程
python 游戏开发实战教程
Python 电子书100本
Python 学习路线规划
![](https://img-blog.csdnimg.cn/d29631674929476f9c3b30f7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**