当前位置: 移动技术网 > IT编程>脚本编程>Python > Python3按一定数据位数格式处理bin文件的方法

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

2019年05月30日  | 移动技术网IT编程  | 我要评论

人生观和价值观,钟祥天气预报,张妙儿

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网