Объединение одиночных и повторяющихся переменных в protobuff для разбора Python - PullRequest
2 голосов
/ 20 января 2020

Мой коллега сериализовал файл 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 датчика непрерывно отправляют сообщение журнала с отметкой времени. Перед сериализацией каждого измерения датчика он создает структуру с отметкой времени и данными трех датчиков. Мы хотим десериализовать этот файл журнала в Python, где у нас есть заголовок, а затем элемент LogDetail с метками времени и данными датчиков.

Я попытался сгенерировать файл .py из .proto файла с proto c и используйте этот .py следующим образом:

import PSessionLogs_pb2

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

Это дает мне

"DecodeError: усеченное сообщение."

Похоже, что журнал также перезаписывает значение EntityType значением метки времени.

Есть идеи, что я делаю неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...