如何在Python中直接将abc.pb文件读取为Protobuf Message对象?
读取protobuf文件为Message对象的正确方式
你不需要把字节数据转成字符串再反向转换,protobuf的Python API直接支持从字节数据解析出Message对象,步骤如下:
确保你有对应pb文件的生成类
首先你需要通过protoc工具,将定义这个pb文件的.proto文件编译成Python类。比如你的proto定义了MyData消息,编译后会生成包含MyData类的Python模块。解析字节数据为Message对象
用你已经写好的代码读取字节数据后,直接调用Message类的ParseFromString()方法(该方法原生接受bytes类型参数)即可:
# 导入编译好的Message类,替换成你实际的模块和类名 from my_proto_module import MyData # 读取pb文件的字节数据 with open("abc.pb", "rb") as file_handle: pb_bytes = file_handle.read() # 解析为Message对象 target_message = MyData() target_message.ParseFromString(pb_bytes)
这样得到的target_message就是完整的Message对象,完全保留了pb文件的原始格式和数据,没有多余的转换步骤。
如果需要验证解析结果,可以直接打印对象,或者访问其字段:
print(target_message.some_field)
注意:必须保证编译生成的Python类和pb文件对应的proto定义完全一致,否则会出现解析错误或数据丢失的情况。
内容的提问来源于stack exchange,提问作者Isha Nema
相关产品推荐
相关产品推荐

