如何处理二进制文件

作者: SmallRookie | 来源:发表于2017-08-13 01:33 被阅读44次
实际案例

WAV是一种音频文件的格式,音频文件为二进制文件。WAV文件由头部信息和音频采样数据构成。前44个字节为头部信息,包括声道数、采样频率和PCM位宽等,后面是音频采样数据。

(注:图片来源于互联网,如若侵权请联系本人立删,谢谢!)

请使用Python分析一个WAV文件头部信息,处理音频数据。

解决方案:

  • open函数以二进制模式打开文件,指定mode参数为'b'
  • 二进制数据可以用readinto读入到提取分配好的buffer中,便于数据处理
  • 解析二进制数据可以使用标准库中的struct模块的unpack方法

注:关于unpack()的参数问题,Python官方文档中并没用明确说明。因此,可查看嘎啦的博文。

具体代码如下:

# -*- coding: utf-8 -*-

import struct
import array

f = open('test.wav', 'rb')
# 读取文件前44个字节的数据
info = f.read(44)

# 解析二进制数据--声道数
print struct.unpack('h', info[22:24])

# WAV文件中data部分的大小 / 数据类型的大小 -> buffer的大小
f.seek(0, 2)
n = (f.tell() - 44) / 2

buf = array.array('h', (0 for _ in xrange(n)))

# 将数据读至buf中
f.seek(44)
f.readinto(buf)

for i in xrange(n):
    # 数据处理,相当于将音频文件的声音变小
    buf[i] /= 8

f.close()

# 创建demo.wav
f = open('demo.wav', 'wb')
# 将test.wav中前44个字节的数据写入文件
f.write(info)
# 将buf中的数据写入文件
buf.tofile(f)

f.close()

相关文章

  • java的文件读写

    Java中如何以二进制字节的方式来处理文件,前面我们提到Java中有流的概念,以二进制方式读写的主要流有:❑ In...

  • git push大文件处理方法

    Git对二进制文件处理效率不高(Git默认会压缩并存储二进制文件的所有完整版本,如果二进制文件很多,这种做法显然不...

  • Java做web开发的另一种思路

    gcc可以将Java代码编译为二进制,但是二进制如何不能打war包。 可执行文件处理web请求2种办法 自己监听处...

  • File文件读写

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

  • App Store上架出现"二进制文件无效"的处理方法

    App Store上架出现"二进制文件无效"的处理方法 App Store上架点击审核之后,出现二进制文件无效,最...

  • 如何处理二进制文件

    实际案例 WAV是一种音频文件的格式,音频文件为二进制文件。WAV文件由头部信息和音频采样数据构成。前44个字节为...

  • tomcat目录结构

    \bin 目录binary文件,startup.bat shutdown.bat 等二进制批处理文件

  • Xcode 10 各种报错

    1.Xcode上传成功后,itunes上却显示二进制文件无效的处理方法 二进制文件无效的解决方法: Product...

  • 0基础学习C语言第十一章:文件读写

    今天我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。 一个文件,无论它是文本文件还是二进制文件,都...

  • C语言

    第一章 预处理阶段->得到.i文件->编译阶段->得到.s文件->汇编阶段->得到.o文件(二进制文件)->链接阶...

网友评论

    本文标题:如何处理二进制文件

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