网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
详解:
【下载protoc】
https://github.com/google/protobuf/releases
根据自己的平台下载对应的编译器,我的是win10-64位:
解压到C:/Program Files下面:
设置环境变量:这一步使你在本地任何地方使用protoc这个指令
(右击“此电脑”。。。)
测试protoc:
新打开一个命令行:输入protoc --version,如果将输出版本号,说明protoc安装好了
【编写.proto协议文件】
新建一个hello_protobuf文件夹,再在里面建一个空的protobuf文件夹(专门用于存放协议文件):
用pycharm打开该文件夹:
效果:
新建协议文件:
在hello_protobuf/protobuf/目录下手动创建addressbook.proto文件:
并在addressbook.proto中输入:
syntax = "proto3";
message Person {
string name = 1;
int32 id = 2;
string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
repeated PhoneNumber phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
【编译】:
打开命令行,CD到hello_protobuf/protobuf/下面,执行protoc --python_out=./ addressbook.proto
没有输出说明未出错。
新生成hello_protobuf/protobuff/addressbook_pb2.py——这是我们python最终要用的协议文件了
【写测试】:
输入addressbook_test_writing.py
在该文件中输入:
from protobuf import addressbook_pb2
def PromptForAddress(person):
person.id = 1
person.name = "mc.meng"
person.email = "menghaocheng@qq.com"
phone_number = person.phones.add()
phone_number.number = "18565772445"
phone_number.type = addressbook_pb2.Person.MOBILE
def write_test():
address_book = addressbook_pb2.AddressBook()
address_book_file = "./data/addressbook.txt"
try:
f = open(address_book_file, "rb")
address_book.ParseFromString(f.read())
f.close()
except IOError:
print(address_book_file + ": Could not open file. Creating a new one.")
PromptForAddress(address_book.people.add())
f = open(address_book_file, "wb")
f.write(address_book.SerializeToString())
f.close()
if __name__ == "__main__":
write_test()
在创建hello_protobuf/data/目录用于存放数据:
在pycharm中按F5运行:
将输出:
Connected to pydev debugger (build 172.3968.37)
./data/addressbook.txt: Could not open file. Creating a new one.
Process finished with exit code 0
此时在hello_protobuf/data/下生成 了addressbook.txt文件
最后
不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~
给大家准备的学习资料包括但不限于:
Python 环境、pycharm编辑器/永久激活/翻译插件
python 零基础视频教程
Python 界面开发实战教程
Python 爬虫实战教程
Python 数据分析实战教程
python 游戏开发实战教程
Python 电子书100本
Python 学习路线规划
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!