溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法

發(fā)布時(shí)間:2020-09-04 20:06:35 來源:腳本之家 閱讀:191 作者:大魚-瓶邪 欄目:開發(fā)技術(shù)

因?yàn)檠芯可A段經(jīng)常用MATLAB作圖,處理數(shù)據(jù),但是MATLAB太過于龐大,不方便,就想用python處理。

問題:我們通常處理的最原始的數(shù)據(jù)是bin文件,打開后如下所示,是按16進(jìn)制形式存儲(chǔ)的。

Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法

MATLAB處理時(shí),是按照如下方式讀取前10個(gè)數(shù),int32數(shù)據(jù)格式,上圖中的紅色圈表示MATLAB讀取的一個(gè)數(shù)據(jù),前10個(gè)數(shù)據(jù)表示元數(shù)據(jù)。

Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法

MATLAB讀取的前10個(gè)數(shù)據(jù)的結(jié)果:

Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法

而Python中似乎沒有可以在指定數(shù)據(jù)格式位數(shù)下讀取bin文件中數(shù)據(jù),例如想以python中的read()讀取時(shí),圖一中的藍(lán)線所圈的表示一個(gè)數(shù)據(jù),圖中圈了兩個(gè)數(shù)據(jù)。用以下程序讀取MATLAB所讀取的10各數(shù)據(jù),則需要讀40個(gè)。

Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法

結(jié)果如下:也是16進(jìn)制

Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法

每隔三個(gè)數(shù)據(jù)對(duì)應(yīng)時(shí)MATLAB讀取的數(shù)據(jù)。

想到用struct包里面的unpack函數(shù)解決問題,可以可惜的時(shí)python中unpack不支持float32,也不支持int32,所以上面在用python讀取數(shù)據(jù)時(shí),不能以32位讀取,最多以8位讀,從而python挨個(gè)讀取時(shí)一個(gè)藍(lán)線圈里的數(shù)據(jù)。

# 按照給定的格式(fmt)解析字節(jié)流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)

個(gè)人覺得python這方面做的沒有matlab好,

所以python不能以類似于MATLAB中fread(f,N,int32)或者fread(f,N,real*4)的方式讀取上圖中的字符流,也無法解析。

以上這篇Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI