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

我如何告诉python我的数据结构(二进制)是什么样的,这样我就可以绘制它了?,python,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

我有一个像这样的数据集

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

解析二进制数据的一个良好起点是struct模块及其
unpack
函数。这也是您链接到的CSV转储例程所做的。如果您浏览
过程
方法,它将执行以下操作:

  • 读取一块二进制数据
  • 弄清楚它是否有一个有效的头
  • 检查消息类型-如果是格式消息,请解析该消息。如果是 一个描述消息,解析它
  • 转储CSV行

您可以修改此代码,将
\uuu printCSVRow
方法替换为将数据捕获到数据帧(或其他方便的数据结构)中的方法因此,当主例程全部完成时,您可以从数据帧中获取所有数据并绘制它。

解析二进制数据的一个良好起点是struct模块及其
unpack
函数。这也是您链接到的CSV转储例程所做的。如果您浏览
过程
方法,它将执行以下操作:

  • 读取一块二进制数据
  • 弄清楚它是否有一个有效的头
  • 检查消息类型-如果是格式消息,请解析该消息。如果是 一个描述消息,解析它
  • 转储CSV行
您可以修改此代码,将
\uuu printCSVRow
方法替换为将数据捕获到pandas数据框(或其他方便的数据结构)中的方法,以便在主例程完成后,可以从数据框中获取所有数据并进行绘图