十六进制文件读取并转换成二进制文件
生活随笔
收集整理的這篇文章主要介紹了
十六进制文件读取并转换成二进制文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在語音識別,數據傳輸等多方面領域通常會出現文件為我們不想要的進制,這個時候就可以用python強悍的數據處理能力來幫助我們。
第一步就是讀取文件,這里以十六進制示例
all_data = [] for path in self.bin_path: with open(path, 'r') as f: for i in f.readlines(): all_data.append(i.strip('\n'))(溫馨提示:python在打開文件時自帶二進制文件打開模式,如果源文件是二進制形式將使工作減少很多)
第二部數據處理
with open(out_txt_path, 'a') as new_f: for i in all_data: i = i.strip() B_i = eval(f"b'{i}'") each = bin(int(str(''.join(["%02X" % x for x in B_i]).strip()), 16))[2:]new_f.write(str(each) + '\n') print(f'{out_txt_path}: is done')在這里注意一下,十六進制數據有的長這樣
\x00\x80\x02\x00\x00\xe0\x01\x00\x00\x00\xb0\x04\x00\xf8\x12\xf1有的長這樣
12A32B
當然下面這種最好處理了,甚至用python自帶的int都可以轉換(其實其他進制也可以通過int轉換)
但是如果是上面那種,就需要處理了
其中在處理這個問題的時候我遇到一個難題。
with open(path, 'r') as f:在讀取文件時,讀取出來的是字符串str,而''.join(["%02X" % x for x in B_i]必須是bytes形式,即b''(帶有b開頭的字符串),但是在轉成bytes的過程中總是出錯,最后想起python還有eval()這個高級東西,于是毫不猶豫的用上,直接成功。
條條道路通羅馬,是吧
總結
以上是生活随笔為你收集整理的十六进制文件读取并转换成二进制文件的全部內容,希望文章能夠幫你解決所遇到的問題。