python bin文件处理

在下这厢有礼了

0. 软件准备

python 版本 Python 3.7.1
大概花费时间:3天半抽空学习的知识分享

bin文件查看器:https://pan.baidu.com/s/1_XebNTlh052zt5Xa58xDMQ 提取码:f4uj

生bin的工具我就不提供了,你自己找找吧!

1. 基础知识掌握

bin文件: open函数创建file对象

打开文件的不同模式:例子:open(“file.txt”,‘r’)

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
t文本默认
x写模式,新建一个文件,如果该文件存在,则会报错。
b二进制模式
+打开一个文件进行更新(可读可写)。

bin文件的python struct库 读写属性

a = struct.pack('B',0x00) 
b = struct.unpack(‘B’,a)
这块可以使用python编译的看一下哦!(你就明白了)

 1. struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,
 可以把这里的字符串理解为字节流,或字节数组)。其函数原型为:struct.pack(fmt, v1, v2, ...),
 参数fmt是格式字符串,关于格式字符串的相关信息在下面有所介绍。v1, v2, ...表示要转换的python值。

 2. struct.unpack做的工作刚好与struct.pack相反,用于将字节流转换成python数据类型。它的
 函数原型为:struct.unpack(fmt, string),该函数返回一个元组
FormatC TypePython字节数
xpad byteno value1
ccharstring of length 11
bsigned charinteger1
Bunsigned charinteger1
?_Boolbool1
hshortinteger2
Hunsigned shortinteger2
iintinteger4
Iunsigned intinteger or long4
llonginteger4
Lunsigned longlong4
qlong longlong8
Qunsigned long longlong8
ffloatfloat4
ddoublefloat8
schar[]string1
pchar[]string1
Pvoid *long

这快就类似于C语言中的字节对齐,大小端的选择

例子:(后面有说明)
a = struct.pack('<I',0x12345678)  #四字节存入,按小端存储
b = struct.pack('>I',0x12345678)  #四字节存入,按大端存储
CharacterByte orderSize and alignment
@nativenative 凑够4个字节
=nativestandard 按原字节数
<little-endianstandard 按原字节数
>big-endianstandard 按原字节数
!network (= big-endian)standard 按原字节数

2. bin文件的打开和模式

file = open(file_name,'wb')#二进制写模式
file = open(file_name,'rb')#二进制读模式
file = open(file_name,'ab')#二进制补充读写模式

3. bin文件读取

import struct
import os

def ReadFile():
    filepath='7.bin'
    binfile = open(filepath, 'rb') #打开二进制文件
    size = os.path.getsize(filepath) #获得文件大小
    for i in range(size):
        data = binfile.read(1) #每次输出一个字节
        print(data)
    binfile.close()
if __name__ == '__main__':
	ReadFile()

7.bin文件如下
在这里插入图片描述
效果图
在这里插入图片描述

4. bin文件写入

import struct
import os

def WriteFile():
    filepath='7.bin'
    data = 123
    binfile = open(filepath, 'ab+') #打开二进制文件(追加完成)
    a = struct.pack('B',data)
    binfile.write(a)
    binfile.close()
if __name__ == '__main__':
	WriteFile()

7.bin文件
在这里插入图片描述
效果图
在这里插入图片描述

5. bin文件的大小端写入

import struct

file_name = "5.bin"
def Big_little_endian():
    file = open(file_name,'wb')
    a = struct.pack('I',0x12345678)  #四字节存入,正常状态
    b = struct.pack('<I',0x12345678)  #四字节存入,按小端存储
    c = struct.pack('>I',0x12345678)  #四字节存入,按大端存储
    file.write(a)
    file.write(b)
    file.write(c)
    file.close()
   
if __name__ == '__main__':
    Big_little_endian()

效果图

在这里插入图片描述

6. bin文件的写0

import struct

bin_file_1 = "1.bin"

def write0x00():
    file = open(bin_file_1,'wb')
    for i in range(1,0xFF):   
        data = struct.pack('B',0x00)  #写0
        file.write(data)
    file.close

if __name__ == '__main__':
    write0x00()

效果图:

在这里插入图片描述

7. bin文件的写1

import struct

bin_file_2 = "2.bin"

def write0xFF():
    file = open(bin_file_2,'wb')
    for i in range(0,0xFF):   
        data = struct.pack('B',0xFF)  #写1
        file.write(data)
    file.close

if __name__ == '__main__':
    write0x00()

效果图:
在这里插入图片描述

8. bin文件的合并

1.bin和2.bin合并成merage.bin

import struct

bin_file_1 = "1.bin"
bin_file_2 = "2.bin"
bin_file_merage = "merage.bin"

def merage_bin():
    file_merage = open(bin_file_merage,'wb')
    file_1 = open(bin_file_1,'rb')
    data = file_1.read()
    file_merage.write(data)    
    file_2 = open(bin_file_2,'rb')
    data = file_2.read()
    file_merage.write(data)
    file_1.close()
    file_2.close()
    file_merage.close()
    
if __name__ == '__main__':
    merage_bin()

效果图:
在这里插入图片描述

9. bin文件写入字符串

import struct
import string

bin_file_1 = "7.bin"

enter = memoryview(b"STARTX") #返回值是元组

def writeString():
    file = open(bin_file_1,'wb')
    for i in enter:
        data = struct.pack('B',i)
        file.write(data)
    file.close

if __name__ == '__main__':
    writeString()

效果图:

在这里插入图片描述

学习:

  1. https://blog.csdn.net/and_then111/article/details/86744938
  2. python手册
  • 25
    点赞
  • 225
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值