溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python處理二進(jìn)制bin文件

發(fā)布時(shí)間:2020-07-12 18:40:46 來源:網(wǎng)絡(luò) 閱讀:873 作者:ckllf 欄目:編程語言

  1. 什么是.bin文件

  擴(kuò)展名為.bin的文件就是一個(gè)二進(jìn)制文件(binary)。不同于文本文件,二進(jìn)制文件用記事本、Notepad++等打開都是亂碼。

  像是這樣:

  

python處理二進(jìn)制bin文件


  但是.bin文件可以用WINHEX等軟件打開。二進(jìn)制文件里面存儲的都是數(shù)據(jù),只有按照某個(gè)預(yù)先設(shè)定的規(guī)則讀出,才能明白這些數(shù)字的具體含義。

  WINHEX將二進(jìn)制文件內(nèi)容轉(zhuǎn)為十六進(jìn)制的形式展現(xiàn)出來:

  

python處理二進(jìn)制bin文件


  二進(jìn)制文件相比于文本文件的優(yōu)點(diǎn):節(jié)約存儲空間、讀寫速度快、有一定的加密保護(hù)作用。

  關(guān)于二進(jìn)制文件與文本文件,可以參考下這個(gè)博客程序員別唬我系列之:二進(jìn)制文件

  2. 二進(jìn)制文件讀寫

  2.1 讀二進(jìn)制文件

  讀二進(jìn)制文件 “x.bin” 的內(nèi)容,每次輸出一個(gè)字節(jié)。

  (1) 文件路徑放在filepath中,這里將.bin文件與代碼文件放在了同一個(gè)文件夾下,因此沒有寫絕對路徑。

  (2) open(filepath, 'rb'):以讀的形式打開文件文件,注意使用 rb 來讀二進(jìn)制文件。

  (3) 記得close: binfile.close()

  import struct

  import os

  if __name__ == '__main__':

  filepath='x.bin'

  binfile = open(filepath, 'rb') #打開二進(jìn)制文件

  size = os.path.getsize(filepath) #獲得文件大小

  for i in range(size):

  data = binfile.read(1) #每次輸出一個(gè)字節(jié)

  print(data)

  binfile.close()

  運(yùn)行,輸出結(jié)果:

  

python處理二進(jìn)制bin文件


  如果想看到十進(jìn)制的結(jié)果,可以使用python中的struct.unpack()方法:

  struct.unpack('B', data):這里的參數(shù)B的含義是將C結(jié)構(gòu)數(shù)據(jù)的unsigned char 類型轉(zhuǎn)為python中的integer

  這里得到的num是tuple類型,因此使用num[0]將數(shù)字取出。

  for i in range(size):

  data = binfile.read(1)

  num = struct.unpack('B', data)

  print(num[0])

  輸出結(jié)果為:

  

python處理二進(jìn)制bin文件


  2.2 寫二進(jìn)制文件

  (1) 假設(shè)要把數(shù)字123寫入二進(jìn)制文件,首先需要把數(shù)字int類型轉(zhuǎn)為bytes類型。

  data.to_bytes(1, 'big'):參數(shù) ‘1’ :轉(zhuǎn)為1個(gè)字節(jié)的bytes; 參數(shù) 'big’ :byteorder。

  查看某個(gè)變量a的類型,可以利用type()

  a=123

  print('a:',type(a))

  b=a.to_bytes(1,'big')

  print('b:',type(b))

  輸出:無錫哪家醫(yī)院婦科好 http://www.csfk0731.com/

  

python處理二進(jìn)制bin文件


  (2) open(filepath, 'ab+') :寫模式打開二進(jìn)制文件。

  寫入時(shí)注意:使用 ab+ 來完成追加寫入,使用 wb來完成覆蓋寫入。

  (3) 關(guān)閉binfile.close()

  data=123

  content= data.to_bytes(1, 'big')

  filepath='123.bin'

  binfile = open(filepath, 'ab+') #追加寫入

  binfile.write(content)

  print('content',content)

  binfile.close()

  2.3 打開文件模式

  列了下打開文件的不同模式,也就是open()里第二個(gè)參數(shù)。 帶b的參數(shù)表示操作二進(jìn)制文件,不帶b的操作文本文件。

  摘自Python文件讀寫(open(),close(),with open() as f…

  模式  描述

  r  以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認(rèn)模式。

  rb  以二進(jìn)制格式打開一個(gè)文件用于只讀。文件指針將會放在文件的開頭。這是默認(rèn)模式。

  r+  打開一個(gè)文件用于讀寫。文件指針將會放在文件的開頭。

  rb+  以二進(jìn)制格式打開一個(gè)文件用于讀寫。文件指針將會放在文件的開頭。

  w  打開一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。

  wb  以二進(jìn)制格式打開一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。

  w+  打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。

  wb+  以二進(jìn)制格式打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。

  a  打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會放在文件的結(jié)尾。也就是說,新的內(nèi)容將會被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。

  ab  以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會放在文件的結(jié)尾。也就是說,新的內(nèi)容將會被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。

  a+  打開一個(gè)文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結(jié)尾。文件打開時(shí)會是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫。

  ab+  以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI