python使用numpy按一定格式讀取bin文件的實現(xiàn)
使用numpy按一定格式讀取bin文件
python環(huán)境下,如何使用numpy像matlab一樣按一定格式讀取bin文件?
bin文件就是將數(shù)據(jù)按16進制形式存儲的二進制文件(binary),可以使用WINHEX、Notepad++(需安裝插件)等以16進制形式打開,如圖用notepad++打開。
由于使用python中的read()讀取二進制文件時是以字符串形式讀取,且每次只能讀取一個字節(jié),十分不方便。
偶然發(fā)現(xiàn)可以使用numpy中的fromfile按指定格式對bin文件進行讀寫,方便了許多。
NumPy提供了多種存取數(shù)組內(nèi)容的文件操作函數(shù)。
保存數(shù)組數(shù)據(jù)的文件可以是二進制格式或者文本格式。
二進制格式的文件又分為NumPy專用的格式化二進制類型和無格式類型。
tofile()
將數(shù)組中的數(shù)據(jù)以二進制格式寫進文件tofile()
輸出的數(shù)據(jù)不保存數(shù)組形狀和元素類型等信息fromfile()
函數(shù)讀回數(shù)據(jù)時需要用戶指定元素類型,并對數(shù)組的形狀進行適當(dāng)?shù)男薷?/li>
這里重點介紹fromfile
numpy.fromfile(file,?dtype=float,?count=-1,?sep='',?offset=0,?*,?like=None)?
file
:是待讀取內(nèi)容,可以是文件、路徑、字符串dtype
:返回數(shù)組的數(shù)據(jù)類型。對于二進制文件,它用于確定文件中項目的大小和字節(jié)順序。支持大多數(shù)內(nèi)置數(shù)字類型,也支持?jǐn)U展類型。1.18.0開始支持復(fù)數(shù)格式count
:要讀取的項目數(shù)量(不一定以字節(jié)為單位),count = -1表示讀取所有項目(即完整文件)sep
:項目之間的分隔符(如果文件是文本文件)??眨?ldquo;”)分隔符表示文件應(yīng)被視為二進制文件。分隔符中的空格(“”)與零個或多個空格字符匹配。僅由空格組成的分隔符必須至少匹配一個空格offset
:距文件當(dāng)前位置的偏移量(以字節(jié)為單位)。默認(rèn)為0。僅允許用于二進制文件。可以和count搭配用于讀取指定位置和長度的內(nèi)容。like
:引用對象以允許創(chuàng)建非NumPy數(shù)組的數(shù)組,如果傳入一個像like一樣支持__array_function__
協(xié)議的數(shù)組形式,結(jié)果將由它來定義。在這種情況下,它確保創(chuàng)建與通過此參數(shù)傳入的對象兼容的數(shù)組對象。
import numpy as np a = np.arange(24) b = np.fromfile("F:/a.bin", dtype=np.int32, count=5, offset=8) print(a, '\n', b)
由上圖可以看出,數(shù)據(jù)是以32位的十六進制數(shù)形式存儲,也就是一個數(shù)占4個字節(jié)。(tofile寫入數(shù)據(jù)的順序為 ‘C’ order)。
此時,若設(shè)置count=5, offset=8,也就是從0開始偏移8個字節(jié),讀取5個數(shù)
結(jié)果如圖:
python讀取bin文件并下發(fā)串口
# coding:utf-8 import time, serial from struct import * import binascii file = open('E:\\1.bin', 'rb') i = 0 while 1: c = file.read(1) # 將字節(jié)轉(zhuǎn)換成16進制; ssss = str(binascii.b2a_hex(c))[2:-1] print(str(binascii.b2a_hex(c))[2:-1]) if not c: break ser = serial.Serial('COM3', 57600, timeout=1) ser.write(bytes().fromhex(ssss))# 將16進制轉(zhuǎn)換為字節(jié) if i % 16 == 0: time.sleep(0.001) #寫每一行等待的時間 i += 1 ser.close() file.close()
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python在一個范圍內(nèi)取隨機數(shù)的簡單實例
在本篇內(nèi)容里小編給大家分享了關(guān)于python在一個范圍內(nèi)取隨機數(shù)的簡單實例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2020-08-08Python如何實現(xiàn)SSH遠(yuǎn)程連接與文件傳輸
這篇文章主要介紹了Python如何實現(xiàn)SSH遠(yuǎn)程連接與文件傳輸問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05通俗的講解深度學(xué)習(xí)中CUDA,cudatookit,cudnn和pytorch的關(guān)系
有些剛?cè)胄械呐笥芽偸歉悴磺宄﨏UDA,cudatookit,cudnn和pytorch的關(guān)系,那么今天這篇文章用通俗易懂的話講解了他們之間的關(guān)系,需要的朋友可以參考下,相信會對你有所幫助2023-03-03