Protobuf是谷歌Google开源的一个序列化框架,他可以将任意文件转化为序列化形式,并通过网络进行传输,是适合大数据进行传输的数据格式。
在Python上Protobuf的使用流程:
1.安装Protoc,因为Protubuf在Python上需要用c编译加速
Releases · protocolbuffers/protobuf · GitHub
2.安装合适版本的Protobuf
protobuf 如何安装?_一只码猴的博客-CSDN博客_protobuf安装
相较链接中下载安装包安装,直接pip install protobuf更为简单
3.编写.proto文件
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)