Python之转化成 PB 格式数据存储格式

Python之转化成 PB 格式数据存储格式,第1张

概述一、概述ProtocolBuffers是Google公司开发的一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或RPC数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。ProtocolBuffers简称为 一、概述

Protocol Buffers 是 Google 公司开发的一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

Protocol Buffers 简称为 protobuf 或 pb,下面是使用 python 解析 pb。

二、安装下载目标语言的编译器:下载地址安装:
$ ./configure  $ make  $ sudo make install 
验证安装:protoc --version,显示当前版本:libprotoc x.x.x安装 Python 的 protobuf 库:pip install protobuf三、使用3.1 编译 proto 文件

Protobuf 语义清晰,无需类似 XML 解析器的东西(因为 Protobuf 编译器会将 .proto 文件编译生成对应的数据访问类以对 Protobuf 数据进行序列化、反序列化 *** 作)。

protoc --python_out=./ ./文件名.proto  

这时会在当前目录生成一个与文件名同名的目录,该目录下会有一个 .py 文件。这个文件会用作模块、解析规则去解析 pb 的源数据。

3.2 解析 pb 的数据
from test_pb import Test # 从刚才编译出来的 py 文件中 import 解析的类message = test()with open('test.pb', 'rb') as fb:    pb_content = fb.read() # 如果文件很大,则要分批读取    # pb_content 是二进制的pb数据,如果是文件,则需要用 open 方法读取数据    message.ParseFromString(pd_content)print message
3.3 写入数据
from test_pb import Test # 从刚才编译出来的 py 文件中 import 解析的类message = test()message.name = 'hello world' # 赋值with open('test.pb', 'wb') as fb:    # 序列化,写入文件    fb.write(person.SerializetoString())
3.4 probuf 转 dict

当 probuf 的数据包含中文时,解析后对于阅读十分不友好。同时如果想要把 probuf 对象转化成 dict 进行后续 *** 作的话。可以试试第三方库:protobuf-to-dict,这个库可以很方便的把 probuf 的数据转化成 dict。示例代码如下:

from protobuf_to_dict import protobuf_to_dictmy_message = MyMessage()# pb_my_message is a protobuf stringmy_message.ParseFromString(pb_my_message)protobuf_to_dict(my_message)# 输出:{'message': 'Hello'}
3.5 更多

这篇文章只是使用 python 简单的解析、序列化。更多细节以及原理推荐阅读Google Protocol Buffer 的使用和原理

四、错误Google.protobuf.message.DecodeError: Truncated message.:首先要保证 pb source 为二进制的数据,否则会出现各种非预期错误五、参考ProtoBuf 与 Python 结合使用初步 总结

以上是内存溢出为你收集整理的Python之转化成 PB 格式数据存储格式全部内容,希望文章能够帮你解决Python之转化成 PB 格式数据存储格式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1185213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存