python处理二进制数据的方法


Posted in Python onJune 03, 2015

本文实例讲述了python处理二进制数据的方法。分享给大家供大家参考。具体如下:

#!/usr/env/env python 
#-*- coding: cp936 -*- 
''''' 
add Head Infomation for pcm file 
''' 
import sys 
import struct 
import os 
__author__ = 'bob_hu, hewitt924@gmail.com' 
__date__ = 'Dec 19,2011' 
__update__ = 'Dec 19,2011' 
def geneHeadInfo(sampleRate,bits,sampleNum): 
  ''''' 
  生成头信息,需要采样率,每个采样的位数,和整个wav的采样的字节数 
  ''' 
  rHeadInfo = '\x52\x49\x46\x46' 
  fileLength = struct.pack('i',sampleNum + 36) 
  rHeadInfo += fileLength 
  rHeadInfo += '\x57\x41\x56\x45\x66\x6D\x74\x20\x10\x00\x00\x00\x01\x00\x01\x00' 
  rHeadInfo += struct.pack('i',sampleRate) 
  rHeadInfo += struct.pack('i',sampleRate * bits / 8) 
  rHeadInfo += '\x02\x00' 
  rHeadInfo += struct.pack('H',bits) 
  rHeadInfo += '\x64\x61\x74\x61' 
  rHeadInfo += struct.pack('i',sampleNum) 
  return rHeadInfo 
if __name__ == '__main__': 
  if len(sys.argv) != 5: 
    print "usage: python %s inFile sampleRate bits outFile" % sys.argv[0] 
    sys.exit(1) 
  fout = open(sys.argv[4],'wb') #用二进制的写入模式 
  #fout.write(struct.pack('4s','\x66\x6D\x74\x20'))
  #写入一个长度为4的串,这个串的二进制内容为 66 6D 74 20 
  #Riff_flag,afd,fad,afdd, = struct.unpack('4c',fin.read(4))
  #读入四个字节,每一个都解析成一个字母 
  #open(sys.argv[4],'wb').write(struct.pack('4s','fmt '))
  #将字符串解析成二进制后再写入 
  #open(sys.argv[4],'wb').write('\x3C\x9C\x00\x00\x57')
  #直接写入二进制内容:3C 9C 00 00 57 
  #fout.write(struct.pack('i',6000)) #写入6000的二进制形式 
  #check whether inFile has head-Info 
  fin = open(sys.argv[1],'rb') 
  Riff_flag, = struct.unpack('4s',fin.read(4)) 
  if Riff_flag == 'RIFF': 
    print "%s 有头信息" % sys.argv[1] 
    fin.close() 
    sys.exit(0) 
  else: 
    print "%s 没有头信息" % sys.argv[1] 
    fin.close() 
    #采样率 
    sampleRate = int(sys.argv[2]) 
    #bit位 
    bits = int(sys.argv[3]) 
    fin = open(sys.argv[1],'rb') 
    startPos = fin.tell() 
    fin.seek(0,os.SEEK_END) 
    endPos = fin.tell() 
    sampleNum = (endPos - startPos) 
    print sampleNum 
    headInfo = geneHeadInfo(sampleRate,bits,sampleNum) 
    fout.write(headInfo) 
    fin.seek(os.SEEK_SET) 
    fout.write(fin.read()) 
    fin.close() 
    fout.close()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python自动化部署工具Fabric的简单上手指南
Apr 19 Python
Python判断变量是否为Json格式的字符串示例
May 03 Python
Python开发的实用计算器完整实例
May 10 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
python3中eval函数用法使用简介
Aug 02 Python
Python实现图片添加文字
Nov 26 Python
Python生成器实现简单"生产者消费者"模型代码实例
Mar 27 Python
关于python 跨域处理方式详解
Mar 28 Python
python 中的命名空间,你真的了解吗?
Aug 19 Python
用python发送微信消息
Dec 21 Python
Python读写配置文件的方法
Jun 03 #Python
python操作ssh实现服务器日志下载的方法
Jun 03 #Python
Python实现建立SSH连接的方法
Jun 03 #Python
解密Python中的描述符(descriptor)
Jun 03 #Python
python实用代码片段收集贴
Jun 03 #Python
Perl中著名的Schwartzian转换问题解决实现
Jun 02 #Python
python通过ssh-powershell监控windows的方法
Jun 02 #Python
You might like
php cookie 登录验证示例代码
2009/03/16 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
Python写的服务监控程序实例
2015/01/31 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
校园门卫岗位职责
2013/12/09 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
社会发展项目建议书
2014/08/25 职场文书
长城导游词400字
2015/01/30 职场文书
孕妇病假条怎么写
2015/08/17 职场文书
高中政治教学反思
2016/02/23 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL