在protobuff中组合单个和重复变量以进行Python解析

2024-09-30 12:13:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一位同事根据以下模式序列化了protobuff文件:

syntax = "proto3";

import "timestamp.proto";

message PSessionLogs {
    // from Root proto
    int32 EntityType = 1;      
    string SessionID = 2;       
    repeated PSessionLogsDetail LogDetail = 3;
}

message PSessionLogsDetail {
    google.protobuf.Timestamp DataTimestamp = 1;

    // Sensory data
    int32 Sens1 = 2;
    int32 Sens2 = 3;
    int32 Sens3 = 4;
}

本质上,消息有一个标头(EntityType和SessionID),在该标头之后,日志记录开始,其中3个传感器连续发送带有时间戳的日志消息。在序列化每个传感器测量之前,他创建了一个带有时间戳和3个传感器数据的结构。我们要做的是在Python中反序列化这个日志文件,其中有一个头,然后是一个带有时间戳和传感器数据的LogDetail成员

我尝试使用protoc从.proto文件生成一个.py文件,并使用此.py,如下所示:

import PSessionLogs_pb2

with open('$PROTOBUF_LOG_FILENAME$', 'rb') as f:
    read_metric =  PSessionLogs_pb2.PSessionLogs()
    read_metric.ParseFromString(f.read())

这给了我

"DecodeError: Truncated message."

日志似乎也在用时间戳值覆盖EntityType的值

知道我做错了什么吗


Tags: 文件import消息messageread序列化时间传感器

热门问题