python基础---protobuf的使用(还未完成)
Posted 易辰_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础---protobuf的使用(还未完成)相关的知识,希望对你有一定的参考价值。
python基础–protobuf的使用(一)
在上一篇博客中,我们了解了如何安装protobuf,以及写了2个例子,来了解如何利用protobuf规则进行数据的序列化和范序列化
这篇博客我们就继续写几个例子,来了解下protobuf规则,然后在结合前端进行简单交互
repeated规则
以下是百度翻译的谷歌protobuf官方文档
可以自行查阅https://developers.google.com/protocol-buffers/docs/reference/python-generated#extension
Repeated Fields
重复字段表示为像Python序列那样的对象。与嵌入消息一样,不能直接分配字段,但可以操作它
message Foo
repeated int32 nums = 1;
Repeated Message Fields
重复消息类似于重复标量字段,但相应的Python对象不具有AppEnter()函数。相反,它有一个Ad()函数,它创建一个新的消息对象,将其附加到列表中,并返回给调用者填写。它还有一个扩展()函数,它附加了一个完整的消息列表,但是复制了列表中的每个消息。这样做使得消息总是由父消息所拥有,以避免循环引用和当可变数据结构拥有多个所有者时可能发生的其他混淆。
message Foo
repeated Bar bars = 1;
message Bar
int32 i = 1;
int32 j = 2;
我们来看一个完整的例子
python_proto.proto
syntax = "proto3";
package proto_;
message Foo
//普通属性
string foo_name = 1;
//嵌套message
message Bar
string bar = 1;
//列表
repeated int32 nums = 2;
//列表1
repeated BarMsg bars = 3;
//列表1
message BarMsg
int32 i = 1;
int32 j = 2;
然后通过protoc ./python_proto.proto --python_out=./
编译
python_proto.py
from proto_ import python_proto_pb2
#第一种方式添加BarMsg : Repeated Message
foo = python_proto_pb2.Foo(
bars = [
python_proto_pb2.BarMsg(i=7777111,j=92323232)
]
)
#普通属性
foo.foo_name = "safly"
#列表nums :Repeated Fields
foo.nums.append(15)
foo.nums.extend([32, 47])
foo.nums[0] = 123
foo.nums.insert(0,34343)
bar = python_proto_pb2.Foo.Bar
bar.bar_name = "bar_anme"
#列表1Repeated Message Fields
bar_msg = foo.bars.add()
bar_msg.i = 123
#也可以按着如下的方式添加
foo.bars.add(i=999999,j=42342444)
#列表2另外的方式
bar_msg_extend = python_proto_pb2.BarMsg()
bar_msg_extend.i = 234
bar_msg_extend.j = 456
foo.bars.extend([bar_msg_extend])
serializeToString = foo.SerializeToString()
foo.ParseFromString(serializeToString)
print(foo.foo_name)
print(foo.Bar.bar_name)
for i in foo.nums:
print(i)
for i in foo.bars:
print(i.i)
#修改
foo.bars[1].i = 97979
for i in foo.bars:
print(i.i)
输出如下:
/Users/zhiliao/miniconda3/bin/python /Users/zhiliao/zhiliao/untitled1/proto_/python_proto.py
safly
bar_anme
34343
123
32
47
7777111
123
999999
234
7777111
97979
999999
234
Process finished with exit code 0
以上是关于python基础---protobuf的使用(还未完成)的主要内容,如果未能解决你的问题,请参考以下文章