因為研究生階段經常用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) |
新聞熱點
疑難解答