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

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

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

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

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

每隔三個(gè)數(shù)據(jù)對應(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文件的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
django創(chuàng)建超級用戶時(shí)指定添加其它字段方式
這篇文章主要介紹了django創(chuàng)建超級用戶時(shí)指定添加其它字段方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python運(yùn)用于數(shù)據(jù)分析的簡單教程
這篇文章主要介紹了Python運(yùn)用于數(shù)據(jù)分析的簡單教程,主要介紹了如何運(yùn)用Python來進(jìn)行數(shù)據(jù)導(dǎo)入、變化、統(tǒng)計(jì)和假設(shè)檢驗(yàn)等基本的數(shù)據(jù)分析,需要的朋友可以參考下2015-03-03
使用python實(shí)現(xiàn)抓取騰訊視頻所有電影的爬蟲
這篇文章主要介紹了使用python實(shí)現(xiàn)抓取騰訊視頻所有電影的爬蟲,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
python中字符串?dāng)?shù)組逆序排列方法總結(jié)
在本篇文章里小編給大家整理了關(guān)于python中字符串?dāng)?shù)組如何逆序排列的相關(guān)知識點(diǎn),需要的朋友們學(xué)習(xí)下。2019-06-06
Python利用LyScript插件實(shí)現(xiàn)批量打開關(guān)閉進(jìn)程
LyScript是一款x64dbg主動化操控插件,經(jīng)過Python操控X64dbg,完成了遠(yuǎn)程動態(tài)調(diào)試,解決了逆向工作者剖析漏洞,尋覓指令片段,原生腳本不行強(qiáng)壯的問題。本文將利用LyScript插件實(shí)現(xiàn)批量打開關(guān)閉進(jìn)程,感興趣的可以了解一下2022-07-07

