python處理二進位制檔案( bin

2021-09-10 12:47:56 字數 3357 閱讀 2390

最近遇到了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...