我如何告诉python我的数据结构(二进制)是什么样的,我可以绘制它?

时间:2016-10-14 17:52:47

标签: python

我有一个看起来像这样的数据集。

b'\xa3\x95\x80\x80YFMT\x00BBnNZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Type,Length,Name,Format,Columns\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x95\x80\x81\x17PARMNf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Name,Value\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x95\x80\x82-GPS\x00BIHBcLLeeEefI\x00\x00\x00Status,TimeMS,Week,NSats,HDop,Lat,Lng,RelAlt,Alt,Spd,GCrs,VZ,T\x00\x00\xa3\x95\x80\x83\x1fIMU\x00Iffffff\x00\x00\x00\x00\x00\x00\x00\x00\x00TimeMS,GyrX,GyrY,G

我一直在阅读,试图找到如何在python中实现一个代码,这将允许我解析这些数据,以便我可以相互映射一些列(大部分时间)。

我发现的一些事情可能有助于这样做:

有一个代码可以让我将这些数据转换为CSV文件。我知道如何使用代码并将其转换为CSV文件并从那里进行绘图,但是为了获得学习体验,我希望能够在不将其转换为CSV文件的情况下执行此操作。现在我尝试阅读该代码,但我很无能,因为我对python很新。以下是代码的链接:

https://github.com/PX4/Firmware/blob/master/Tools/sdlog2/sdlog2_dump.py

此外,有人发布了这样的说法,这可能是日志格式,但我再也无法理解或运行该页面上的任何代码。

http://dev.px4.io/advanced-ulog-file-format.html

1 个答案:

答案 0 :(得分:2)

解析二进制数据的一个很好的起点是struct module https://docs.python.org/3/library/struct.html及其unpack函数。这就是您链接到的CSV转储例程也在做什么。如果您使用process方法,它会执行以下操作:

  • 读取一大块二进制数据
  • 弄清楚它是否有有效的标题
  • 检查消息类型 -​​ 如果是FORMAT消息,则解析该消息。如果是的话 描述消息,解析它。
  • 转储CSV行

您可以修改此代码,基本上将__printCSVRow方法替换为将数据捕获到pandas数据帧(或其他方便的数据结构)中的内容,以便在主例程完成后,您可以获取所有数据从数据框中绘制出来。