【Protobuf】使用Python实现Protobuf数据框架

        Protobuf是谷歌Google开源的一个序列化框架,他可以将任意文件转化为序列化形式,并通过网络进行传输,是适合大数据进行传输的数据格式。

在Python上Protobuf的使用流程:

1.安装Protoc,因为Protubuf在Python上需要用c编译加速

Releases · protocolbuffers/protobuf · GitHub

2.安装合适版本的Protobuf

protobuf 如何安装?_一只码猴的博客-CSDN博客_protobuf安装

相较链接中下载安装包安装,直接pip install protobuf更为简单

3.编写.proto文件

【Protobuf】使用Python实现Protobuf数据框架_第1张图片

4.编译.proto文件生成.py文件

protoc --python_out=. data.proto

import motion_submission_pb2
submission = motion_submission_pb2.MotionChallengeSubmission()
scenario_prediction = submission.scenario_predictions.add()
scenario_prediction.scenario_id = data["scenario_id"][0]
prediction_set = scenario_prediction.single_predictions

 根据proto中定义的不同类的层级,从高层级开始实例化,低层级实例化直接使用高层的实例对象

在proto显示可以重复的数据(repeated),在实例化后加.add()

scenario_prediction = submission.scenario_predictions.add()

5.序列化数据

python中使用 protocol buffer(Protobuf)_whatday的博客-CSDN博客_protocolbuffer python

submission.SerializeToString()

序列化后的文件可以直接通过网络进行传输,也可以保存至文件中

6.将序列化数据保存在文件中(可选)

序列化后的数据可以保存至不同类型的文件中,这里以txt为例:

f = open(file_path, "wb")
f.write(submission.SerializeToString())
f.close()

7.反序列化读取数据

content = submission.SerializeToString()
read = motion_submission_pb2.MotionChallengeSubmission()
read.ParseFromString(content)
print(read)

你可能感兴趣的:(prototype,python)