最近遇到了python处理.bin文件的一些问题,简单地罗列一下。
1. 什么是.bin文件
扩展名为.bin的文件就是一个二进制文件(binary)。不同于文本文件,二进制文件用记事本、Notepad++等打开都是乱码。
像是这样:
但是.bin文件可以用WINHEX等软件打开。二进制文件里面存储的都是数据,只有按照某个预先设定的规则读出,才能明白这些数字的具体含义。
WINHEX将二进制文件内容转为十六进制的形式展现出来:
二进制文件相比于文本文件的优点:节约存储空间、读写速度快、有一定的加密保护作用。
关于二进制文件与文本文件,可以参考下这个博客程序员别唬我系列之:二进制文件
2. 二进制文件读写
2.1 读二进制文件
读二进制文件 “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()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
运行,输出结果:
如果想看到十进制的结果,可以使用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
- 2
- 3
- 4
输出结果为:
2.2 写二进制文件
(1) 假设要把数字123写入二进制文件,首先需要把数字int类型转为bytes类型。data.to_bytes(1, 'big'):参数 ‘1’ :转为1个字节的bytes; 参数 'big’ :byteorder。
查看某个变量
a的类型,可以利用type()
a=123
print('a:',type(a))
b=a.to_bytes(1,'big')
print('b:',type(b))
- 1
- 2
- 3
- 4
输出:
(2) open(filepath, 'ab+') :写模式打开二进制文件。
写入时注意:使用 ab+ 来完成追加写入,使用 wb来完成覆盖写入。
(3) 关闭binfile.close()
data=123
content= data.to_bytes(1, 'big')



所有评论(0)