其實對於檔案單純的讀取還是非常好解決的。只要使用如下語句即可把檔案讀取出到變數temp中:
如果對open函式的引數mode不熟悉,可以查閱:
此處我們需要以二進位制方式讀取該檔案,因此mode=『rb'
with open(filename, mode='rb') as file:
temp = file.read()
file.close()
但是這樣讀出的temp是乙個二進位制串,類似:
\x00\x06\xa7@\x00\x00\x00\x00\x00`\xa5
因此我們還需要對結果進行unpack操作。
在python的struct庫中提供了方法unpack,它可以將二進位制串以自定的形式轉換成使用者想要的字串。
您可以檢視官方文件以獲取更多資訊。
但在此處,我們已知我們的資料是以float型別,小端方式儲存的,因此編寫出來的程式如下:
data = struct.unpack("<" + "d" * (len(temp) // 8), temp[:])
其中,"<"代表以小端方式解構;
「d" * (len(temp) // 8)代表構造出temp // 8 大小的快取區,且這個快取區的格式是」dd····d「,即全為float型別的資料,unpack()函式會以此快取區的格式對二進位制資料進行解構。
至此檔案讀取和轉碼均已完成,如果您要解碼的檔案格式有所不同,請根據unpack()官方文件查詢相應引數並修改。
import struct
def load_binary_file(filename):
"""用於讀取二進位制檔案的函式
"""# 二進位制檔案,讀取使用rb
with open(filename, mode='rb') as file:
temp = file.read()
file.close()
# 使用unpack函式將二進位制資料轉碼,注意使用的讀取是小端儲存的,而且是double型別8位元組轉碼
data = struct.unpack("<" + "d" * (len(temp) // 8), temp[:])
return data
注:該函式只能對檔案內全是float資料的二進位制檔案使用,如格式不對,請修改
data = struct.unpack("<" + "d" * (len(temp) // 8), temp[:])
之後便可以使用輸出的data進行資料處理操作了。
本人也是第一次寫博文,如有不足,還請指教。
Python 二進位制檔案讀取顯示
filename raw input enter file name f open filename,rb f.seek 0,0 index 0 for i in range 0,16 print 3s hex i print for i in range 0,16 print 3s print w...
Python 二進位制檔案讀取顯示
python view plain copy filename raw input enter file name f open filename,rb f.seek 0,0 index 0 fori inrange 0,16 print 3s hex i print fori inrange 0,...
c c讀取二進位制檔案
因專案需要讀取二進位制檔案,一開始用c 讀取,c 下用的是ifstream類,完整 如下 ifstream in b3dmpath.c str ios in ios binary in.seekg 0,ios end size t filesize in.tellg in.seekg ios beg...