二进制文件的好处是没有文件格式,读写直接是数据,不用对格式进行编解码(相比有固定格式的文件)
用python读写二进制文件用到的python库是struct。
在写入文件时,需要对需要写入的数据进行打包,打包的本质是规定了写入的数据按几位写入,比如'a',ascii为0x61, 如果规定写入8位,则写入的数据为:0110 0001, 而如果规定写入16位,则写入的数据为:0000 0000 0110 0001,在按不同的规则读数据时,读出来的数据是不一样的。
在读入文件时,需要对读取的二进制文件进行解包,拆包的本质是规定了按多少位读取一个数据,比如0000 0000 0110 0001,按8位读取一个数据,则为:0x0, 0x61。 按16位读取一个数据,则为:0x61。
写示例:
import struct
fw = open("file_name.bin", "wb")
for i in file_content:
s = struct.pack('B', i)
fw.write(s)
fw.close()
要点:
1.要以二进制写形式打开/创建文件
2.struct.pack第一个参数为数据格式,具体什么格式参考文章末尾连接,示例中'B'是按8位数据写入;第二个参数为需要写入的数据
读示例:
import struct
def read_bin(file_name):
"""
function: read a bin file, return the tuple of the content in file
"""
with open(file_name, "rb") as f:
f_content = f.read()
content = struct.unpack("B" * len(f_content), f_content)
f.close()
return content
要点:
1.同写文件示例,unpack的第一个参数(解包格式)参考下方链接
2.示例为一次性按同一种格式读出所有内容,如果有不同格式,需要自己设计
拆打包格式可参考:Python之struct模块 - 酌三巡 - 博客园