python处理二进制文件(.bin)

最近遇到了python处理.bin文件的一些问题,简单地罗列一下。

  • 1. 什么是.bin文件

  • 2. 二进制文件读写

    • 2.1 读二进制文件

    • 2.2 写二进制文件

    • 2.3 打开文件模式

1. 什么是.bin文件

扩展名为.bin的文件就是一个二进制文件(binary)。不同于文本文件,二进制文件用记事本、Notepad++等打开都是乱码。
像是这样:
用记事本打开了一个.bin文件
但是.bin文件可以用WINHEX等软件打开。二进制文件里面存储的都是数据,只有按照某个预先设定的规则读出,才能明白这些数字的具体含义。

WINHEX将二进制文件内容转为十六进制的形式展现出来:
用WINHEX打开了一个.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中的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])

输出结果为:
在这里插入图片描述

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

输出:

(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+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
好的,针对图书管理系统进行系统架构设计,我们可以从以下几个方面考虑: 1. 系统需求分析 首先,需要明确系统的需求和功能,例如:图书信息管理、借阅管理、归还管理、读者管理、权限管理等等。 2. 架构模式选择 根据系统的需求,可以选择适合的架构模式。常见的架构模式有MVC架构、三层架构、微服务架构等等。在此推荐选用MVC架构,因为它可以将系统的业务逻辑、数据处理和用户界面分离开来,易于维护和扩展。 3. 技术栈选择 选择适合的技术栈也是很重要的。例如:后端可以选择Java、Python等语言,前端可以选择React、Vue等框架。同时,还需要考虑数据库的选择,如MySQL、Oracle等。同时,针对系统的性能、安全性等方面也需要进行考虑。 4. 系统架构设计 在系统架构设计中,需要将系统分为几个模块,例如:前端模块、后端模块、数据库模块等。其中,前端模块负责用户交互界面的设计和实现;后端模块负责系统业务逻辑的处理和数据的处理;数据库模块负责数据的存储和管理。 5. 设计API接口 在系统架构设计中,需要设计API接口,以便前端和后端进行交互。API接口应该尽量简洁明了,遵循RESTful API的规范。 6. 安全性设计 在系统架构设计中,需要考虑系统的安全性。例如:用户注册、登录等需要进行身份验证,同时需要进行数据加密等措施。 综上所述,对于图书管理系统进行系统架构设计,需要从需求分析、架构模式选择、技术栈选择、系统架构设计、API接口设计和安全性设计等方面进行综合考虑。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值