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

平缓的、山坡上镶嵌着一块块粉红色的荞麦田,路边铺着碧绿的青稞地,圆木建成的围栏顺着弯弯曲曲的土路,一直通向远方的原始森林,藏式吊脚楼错落有致地分布在路旁,煮奶茶的淡蓝色烟雾中,牛群、羊群时隐时现,整个氛围呈现着一种中世纪乡土意味。

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

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

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

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

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

结果如下:也是16进制

每隔三个数据对应时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文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

您可能有感兴趣的文章
利用Python模拟登录pastebin.com的实现方法

python如何读取bin文件并下发串口

python binascii 进制转换实例

caffe binaryproto 与 npy相互转换的实例讲解

使用Python脚本将Bing的每日图片作为桌面的好代码教程