如何从Python Protobuf对象中提取字段值并进行操作
Python解析Protobuf提取bytes字段的方法
你遇到的问题是字段访问方式错误。你的msg本身就是File类型的实例,不存在file子属性,直接通过msg.data即可获取独立的纯bytes类型数据,之后就能正常用len()计算长度。
具体操作示例:
- 确保已用protoc将proto文件编译为Python代码(比如生成
file_pb2.py) - 在代码中导入模块并处理消息:
import file_pb2 # 解析二进制数据得到File对象 file_msg = file_pb2.File() file_msg.ParseFromString(your_binary_data) # 提取纯bytes数据 raw_bytes = file_msg.data # 计算字节串长度 byte_length = len(raw_bytes) print(byte_length)
补充说明:
- Protobuf生成的Python对象中,字段直接作为对象属性存在,无需额外层级。只有当消息是嵌套结构时(比如外层消息包含File类型字段),才需要按层级访问,例如:
这种场景下的访问方式才是message OuterMsg { File file = 1; }outer_msg.file.data,此时outer_msg.file是File实例,data为对应的bytes字段。
内容的提问来源于stack exchange,提问作者Mnemosyne
相关产品推荐
相关产品推荐

