在python中访问googleprotobuf文件(简单)

2024-10-03 17:24:03 发布

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

我从一个protobuf文件中读到消息。 消息包含时间序列数据,因此,我预期的是类似矩阵的结构,例如,已处理的_row[nda,nVar]

print(mySerializedData.processed_row)
>> [timestamp: 0.0
linear_acc_x: 0.288501300049
linear_acc_y: 0.573411297607
linear_acc_z: 0.161608612061
, timestamp: 0.0049
linear_acc_x: 0.428562097168
linear_acc_y: 0.685938775635
linear_acc_z: 0.221463653564
, timestamp: 0.01
linear_acc_x: 0.45968671875
linear_acc_y: 0.738611212158
linear_acc_z: 0.185550628662]

我可以访问个人数据

^{pr2}$

但我想得到的是

print(mySerializedData.processed_row[:].timestamp)

但它显示错误AttributeError: 'list' object has no attribute 'timestamp'

print(type(mySerializedData.processed_row[0].timestamp))
>> <type 'float'>
print(type(mySerializedData.processed_row[0]))
>> <class 'PushCore_pb2.ProcessedDataRow'>

有没有办法用类似[:]的gettimestamp双数组?在

谢谢你


Tags: 文件数据消息type时间序列矩阵timestamp
1条回答
网友
1楼 · 发布于 2024-10-03 17:24:03

可以使用list comprehension创建时间戳值列表:

[element.timestamp for element in mySerializedData.processed_row]

这是一个广义的例子。在example.proto中:

^{pr2}$

使用以下命令生成相应的Python输出:

protoc  python_out=. example.proto

然后,在Python中:

>>> from example_pb2 import Container, Element
>>> 
>>> container = Container(
...   elements=[
...     Element(timestamp=.1, data='Some data.'),
...     Element(timestamp=.2, data='Some more data.'),
...   ]
... )
>>> 
>>> [element.timestamp for element in container.elements]
[0.1, 0.2]

相关问题 更多 >