美文网首页
python(处理二进制文件)

python(处理二进制文件)

作者: OldSix1987 | 来源:发表于2016-09-04 02:21 被阅读1763次

案例


分析一个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)

相关文章

  • File文件读写

    一、python3读文本 二、处理二进制文件 使用struct来解析二进制数据 三、设置文件的缓冲 python文...

  • Python之路7:文件处理

    文件处理的操作 基础语法: python打开文件常用模式: 只读,读写,二进制只读及读写模式 只读模式打开一个文件...

  • Python中 struct使用

    有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的str...

  • Python学习第七章

    文件的使用 python能够以文本和二进制两种方式处理文件二进制文件直接由比特0和比特1组成,没有统一字符编码,文...

  • 第6章 文件操作

    6.1 文件的使用 6.1.1 文件概述 Python 能够以文本和二进制两种方式处理文件。文本文件一般由单一特定...

  • python(处理二进制文件)

    案例 分析一个wav文件的头部信息,处理音频数据。 在Python3中,/除法,计算结果是浮点数,即使是两个整数恰...

  • 6. Python 文件

    文件 Python能够以文本和二进制两种方式处理 文件概述 文件是一个储存在辅助存储器上的数据序列,可以包含任何数...

  • Python读取二进制文件

    实际项目中经常遇到读取二进制问题,Python下读取二进制文件一般用Python的文件打开读写相关函数和struc...

  • Python 文件处理

    Python 读文件处理 1. readline() with 处理开闭文件&文件异常处理 readline()内...

  • Python处理wav文件(二进制文件读写)

    以上是WAV文本信息格式图,前面44个字节为头信息,后面的是音频信息 二进制数据可以用readinto,读入到提前...

网友评论

      本文标题:python(处理二进制文件)

      本文链接:https://www.haomeiwen.com/subject/ifrlettx.html