Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法
因為研究生階段經(jīng)常用MATLAB作圖,處理數(shù)據(jù),但是MATLAB太過于龐大,不方便,就想用python處理。
問題:我們通常處理的最原始的數(shù)據(jù)是bin文件,打開后如下所示,是按16進制形式存儲的。

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

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

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

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

每隔三個數(shù)據(jù)對應(yīng)時MATLAB讀取的數(shù)據(jù)。
想到用struct包里面的unpack函數(shù)解決問題,可以可惜的時python中unpack不支持float32,也不支持int32,所以上面在用python讀取數(shù)據(jù)時,不能以32位讀取,最多以8位讀,從而python挨個讀取時一個藍線圈里的數(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) |
個人覺得python這方面做的沒有matlab好,
所以python不能以類似于MATLAB中fread(f,N,int32)或者fread(f,N,real*4)的方式讀取上圖中的字符流,也無法解析。
以上這篇Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
django創(chuàng)建超級用戶時指定添加其它字段方式
這篇文章主要介紹了django創(chuàng)建超級用戶時指定添加其它字段方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python中字符串?dāng)?shù)組逆序排列方法總結(jié)
在本篇文章里小編給大家整理了關(guān)于python中字符串?dāng)?shù)組如何逆序排列的相關(guān)知識點,需要的朋友們學(xué)習(xí)下。2019-06-06
Python利用LyScript插件實現(xiàn)批量打開關(guān)閉進程
LyScript是一款x64dbg主動化操控插件,經(jīng)過Python操控X64dbg,完成了遠程動態(tài)調(diào)試,解決了逆向工作者剖析漏洞,尋覓指令片段,原生腳本不行強壯的問題。本文將利用LyScript插件實現(xiàn)批量打開關(guān)閉進程,感興趣的可以了解一下2022-07-07

