Python3按一定数据位数格式处理bin文件的方法

时间:2022-04-02 20:49:31

因为研究生阶段经常用matlab作图,处理数据,但是matlab太过于庞大,不方便,就想用python处理。

问题:我们通常处理的最原始的数据是bin文件,打开后如下所示,是按16进制形式存储的。

Python3按一定数据位数格式处理bin文件的方法

matlab处理时,是按照如下方式读取前10个数,int32数据格式,上图中的红色圈表示matlab读取的一个数据,前10个数据表示元数据。

Python3按一定数据位数格式处理bin文件的方法

matlab读取的前10个数据的结果:

Python3按一定数据位数格式处理bin文件的方法

而python中似乎没有可以在指定数据格式位数下读取bin文件中数据,例如想以python中的read()读取时,图一中的蓝线所圈的表示一个数据,图中圈了两个数据。用以下程序读取matlab所读取的10各数据,则需要读40个。

Python3按一定数据位数格式处理bin文件的方法

结果如下:也是16进制

Python3按一定数据位数格式处理bin文件的方法

每隔三个数据对应时matlab读取的数据。

想到用struct包里面的unpack函数解决问题,可以可惜的时python中unpack不支持float32,也不支持int32,所以上面在用python读取数据时,不能以32位读取,最多以8位读,从而python挨个读取时一个蓝线圈里的数据。

# 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple

unpack(fmt, string)

string类似于:\x00\x00\x00\x0c\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00]\x00\x00\x00\x0c\x00\x00\x00\x08\x00\x00\x00\t\x00\x00

format c type python type standard size notes
x pad byte no value    
c char string of length 1 1  
b signed char integer 1 (3)
b unsigned char integer 1 (3)
? _bool bool 1 (1)
h short integer 2 (3)
h unsigned short integer 2 (3)
i int integer 4 (3)
i unsigned int integer 4 (3)
l long integer 4 (3)
l unsigned long integer 4 (3)
q long long integer 8 (2), (3)
q unsigned long long integer 8 (2), (3)
f float float 4 (4)
d double float 8 (4)
s char[] string    
p char[] string    
p void * integer  

(5), (3)

个人觉得python这方面做的没有matlab好,

所以python不能以类似于matlab中fread(f,n,int32)或者fread(f,n,real*4)的方式读取上图中的字符流,也无法解析。

以上这篇python3按一定数据位数格式处理bin文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_25948717/article/details/80341390