python处理二进制bin文件

1. 什么是.bin文件

创新互联于2013年创立,公司以成都网站建设、网站设计、系统开发、网络推广、文化传媒、企业宣传、平面广告设计等为主要业务,适用行业近百种。服务企业客户超过千家,涉及国内多个省份客户。拥有多年网站建设开发经验。为企业提供专业的网站建设、创意设计、宣传推广等服务。 通过专业的设计、独特的风格,为不同客户提供各种风格的特色服务。

扩展名为.bin的文件就是一个二进制文件(binary)。不同于文本文件,二进制文件用记事本、Notepad++等打开都是乱码。

像是这样:

python处理二进制bin文件

但是.bin文件可以用WINHEX等软件打开。二进制文件里面存储的都是数据,只有按照某个预先设定的规则读出,才能明白这些数字的具体含义。

WINHEX将二进制文件内容转为十六进制的形式展现出来:

python处理二进制bin文件

二进制文件相比于文本文件的优点:节约存储空间、读写速度快、有一定的加密保护作用。

关于二进制文件与文本文件,可以参考下这个博客程序员别唬我系列之:二进制文件

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()

运行,输出结果:

python处理二进制bin文件

如果想看到十进制的结果,可以使用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])

输出结果为:

python处理二进制bin文件

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))

输出:无锡哪家医院妇科好 http://www.csfk0731.com/

python处理二进制bin文件

(2) open(filepath, 'ab+') :写模式打开二进制文件。

写入时注意:使用 ab+ 来完成追加写入,使用 wb来完成覆盖写入。

(3) 关闭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()里第二个参数。 带b的参数表示操作二进制文件,不带b的操作文本文件。

摘自Python文件读写(open(),close(),with open() as f…

模式  描述

r  以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb  以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

r+  打开一个文件用于读写。文件指针将会放在文件的开头。

rb+  以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

w  打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb  以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

w+  打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb+  以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a  打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+  打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。


分享标题:python处理二进制bin文件
本文URL:http://ybzwz.com/article/ppdoci.html