如何使用QDataStream在Python中打开bin文件

2024-10-01 02:26:03 发布

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

我有一个bin文件,它被编码在一个应用程序中,我需要访问它并转换成csv文件。我已经得到了文档,但不确定如何在Python中访问这个文件的内容。在

下面是关于如何序列化数据集的一些详细信息

datasets.bin is a list of DataSet classes serialized using Qt's QDataStream serialization using version QDataStream::Qt_4_7.

The format of the datasets.bin file is:

quint32 Magic Number    0x46474247
quint32 Version     1
quint32 DataSet Marker  0x44415441
qint32      # of DataSets       n
DataSet DataSet 1
DataSet DataSet 2
     .
     .
     .
     .
DataSet DataSet n


The format of each DataSet is:

quint32     Magic Number    0x53455455  
QString     Name
quint32     Flags           Bit field (Set Table)
QString     Id          [Optional]  
QColor      Color           [Optional]
qint32          Units           [Optional]
QStringList         Creator Ids     [Optional]
bool            Hidden          [Optional]
QList<double>   Thresholds      [Optional]
QString         Source          [Optional]
qint32          Role            [Optional]
QVector<QPointF>    data points

Qti在文档中找不到具体的例子。任何能帮我指明方向的人都会很好


Tags: 文件ofthe文档binisqtoptional
1条回答
网友
1楼 · 发布于 2024-10-01 02:26:03

Pyqt不能以C++的方式读取所有数据,因为它不能处理模板类(如{{CD1>}和^ {CD2>}),这将需要Python中不可用的语言特定支持。这意味着必须使用变通方法。幸运的是,datastream format非常简单,所以读取任意模板类可以简化为一个简单的算法:读取长度为uint32,然后迭代一个range,并将包含的元素逐个读入list

points = []
length = stream.readUInt32()
for index in range(length):
    point = QPoint()
    stream >> point
    points.append(point)

下面的脚本演示如何正确读取整个数据集格式:

^{pr2}$

相关问题 更多 >