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的函数嵌套的使用方法
Jan 24 Python
Python实现获取网站PR及百度权重
Jan 21 Python
在Python中使用第三方模块的教程
Apr 27 Python
python简单实现计算过期时间的方法
Jun 09 Python
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
用pycharm开发django项目示例代码
Jun 13 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
解决python3中os.popen()出错的问题
Nov 19 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与MySQL交互使用详解
2006/10/09 PHP
PHP中函数内引用全局变量的方法
2008/10/20 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
python实现的文件同步服务器实例
2015/06/02 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
如何解决安装python3.6.1失败
2020/07/01 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
影视艺术学院毕业生自荐信
2013/11/13 职场文书
网吧收银员岗位职责
2013/12/14 职场文书
六十大寿答谢词
2014/01/12 职场文书
房产公证书范本
2014/04/10 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
人大代表选举标语
2014/10/07 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS
介绍一下28个JS常用数组方法
2022/05/06 Javascript