最近遇到了python處理.bin檔案的一些問題,簡單地羅列一下。
擴充套件名為.bin的檔案就是乙個二進位制檔案(binary)。不同於文字檔案,二進位制檔案用記事本、notepad++等開啟都是亂碼。
像是這樣:
但是.bin檔案可以用winhex等軟體開啟。二進位制檔案裡面儲存的都是資料,只有按照某個預先設定的規則讀出,才能明白這些數字的具體含義。
winhex將二進位制檔案內容轉為十六進製制的形式展現出來:
二進位制檔案相比於文字檔案的優點:節約儲存空間、讀寫速度快、有一定的加密保護作用。
讀二進位制檔案 「x.bin」 的內容,每次輸出乙個位元組。
(1) 檔案路徑放在filepath
中,這裡將.bin檔案與**檔案放在了同乙個資料夾下,因此沒有寫絕對路徑。
(2)open(filepath, 'rb')
:以讀的形式開啟檔案檔案,注意使用 rb 來讀二進位制檔案。
(3) 記得close:binfile.close()
import struct
import os
if __name__ ==
'__main__'
: filepath=
'x.bin'
binfile =
open
(filepath,
'rb'
) #開啟二進位制檔案
size = os.path.
getsize
(filepath) #獲得檔案大小
for i in
range
(size)
: data = binfile.
read(1
) #每次輸出乙個位元組
print
(data)
binfile.
close
()
執行,輸出結果:
如果想看到十進位制的結果,可以使用python中的struct.unpack()方法:
struct.unpack('b', data)
:這裡的引數b
的含義是將c結構資料的unsigned char 型別轉為python中的integer
這裡得到的num是tuple型別,因此使用num[0]
將數字取出。
for i in
range
(size)
: data = binfile.
read(1
) num = struct.
unpack
('b'
, data)
print
(num[0]
)
(1) 假設要把數字123寫入二進位制檔案,首先需要把數字int型別轉為bytes型別。
data.to_bytes(1, 'big')
:引數 『1
』 :轉為1個位元組的bytes; 引數'big
』 :byteorder。
檢視某個變數a
的型別,可以利用type()
a=
123print
('a:'
,type
(a))
b=a.
to_bytes(1
,'big'
)print
('b:'
,type
(b))
輸出:
(2)open(filepath, 'ab+')
:寫模式開啟二進位制檔案。
寫入時注意:使用 ab+ 來完成追加寫入,使用 wb來完成覆蓋寫入。
(3) 關閉binfile.close()
data=
123content= data.
to_bytes(1
,'big'
)filepath=
'123.bin'
binfile =
open
(filepath,
'ab+'
) #追加寫入
binfile.
write
(content)
print
('content'
,content)
binfile.
close
()
列了下開啟檔案的不同模式,也就是open()
裡第二個引數。 帶b的引數表示操作二進位制檔案,不帶b的操作文字檔案。
摘自python檔案讀寫(open(),close(),with open() as f… 模式
描述r以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
rb以二進位制格式開啟乙個檔案用於唯讀。檔案指標將會放在檔案的開頭。這是預設模式。
r+開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。
rb+以二進位制格式開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。
w開啟乙個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
wb以二進位制格式開啟乙個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
w+開啟乙個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
wb+以二進位制格式開啟乙個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
a開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
ab以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
a+開啟乙個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
ab+以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。
python處理二進位制資料
處理二進位制資料離不開python的struct模組,struct理解上你可以把它理解為c語言的結構體,使用該模組的pack和unpack方法,可以很容易的把二進位制資料轉換為常用的型別資料,如整型 字元型等 結構體如下 struct header 將二進位制資料流解析為常用的資料型別,例如 pyt...
二進位制檔案
本質上是文字檔案是把檔案資訊先轉化成以字元編碼的ascii碼,再儲存ascii的二進位制 而二進位制檔案是直接把檔案資訊編碼成二進位制儲存。因此在讀取的時候要考慮記憶體中二進位制 應該怎麼樣解釋。二進位制檔案的讀取是是要告訴元素的型別 編碼方式 文字檔案則預設為char型別。文字檔案是一種特殊的二進...
二進位制檔案
二進位制檔案 也叫型別檔案 二進位制檔案是由一批同一型別的資料組成的乙個資料序列,就是說乙個具體的二進位制檔案只能存放同一種型別的資料。type tmember record name string 10 email string 20 posts longint end var members a...