欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-05 14:53:58
因为研究生阶段经常用matlab作图,处理数据,但是matlab太过于庞大,不方便,就想用python处理。 问题:我们通常处理的最原始的数据是bin文件,打开后如下所示...

因为研究生阶段经常用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文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。