python 二进制文件合并_python(处理二进制文件)

案例

分析一个wav文件的头部信息,处理音频数据。

wav-sound-format[1].gif

Paste_Image.png

在Python3中,

/除法,计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数;

//除法,称为地板除,两个整数的除法仍然是整数; e.g.: a //= 2

总结

(1)wav头部信息长度44字节,含有声道数,采样频率,编码宽度

(2)文件操作

info = f.read(44) # 只读头44个字节头部信息

f.seek(0, 2) # 将文件指针指向文件末尾方便计算文件的长度

f.tell() # 当前文件的位置

f.readinto(buf) # 将data读入到buf中,保存的是活生生的二进制的机器码

f.write # 写文件

buf.tofile(f) # 将buf中的二进制机器码写入到文件中

(3)array和list

代码

import struct

import array

with open('demo.wav', 'rb') as f:

info = f.read(44)

# print(info[22:24]) # b'\x01\x00'

v3 = struct.unpack('h', info[22:24]) # 音频文件的声道数

v4 = struct.unpack('i', info[24:28]) # 音频文件的采用频率)

v5 = struct.unpack('h', info[34:36]) # 音频文件的编码宽度

# print(v3, v4, v5, sep="\n---\n")

f.seek(0, 2) # 文件指针指向文件末尾

index = f.tell() # 21740

n = (f.tell() - 44) // 2 # wav音频文件44位往后才是音频的data部分

buf = array.array('h', (0 for _ in range(n))) # 初始化为0

f.seek(44) # 文件指针指向data开始的位置

res = f.readinto(buf) # 将data读入array中

for i in range(n):

buf[i] //= 4

with open('demo2.wav', 'wb') as f2:

f2.write(info)

buf.tofile(f2)

v = struct.unpack('h', b'\x01\x02') # 513

v2 = struct.unpack('>h', b'\x01\x02') # 258

# print(v)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值