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 相关文章推荐
一个基于flask的web应用诞生(1)
Apr 11 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
Jan 16 Python
Python作用域与名字空间原理详解
Mar 21 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
python实现腾讯滑块验证码识别
Apr 27 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实现短信发送代码
2015/07/05 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
PHP getName()函数讲解
2019/02/03 PHP
JQuery从头学起第一讲
2010/07/04 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
微信小程序 扎金花简单实例
2017/02/21 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
使用webpack搭建vue项目及注意事项
2019/06/10 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
python的变量与赋值详细分析
2017/11/08 Python
python+opencv实现阈值分割
2018/12/26 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
python中提高pip install速度
2020/02/14 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
Python面向对象实现方法总结
2020/08/12 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
普天C++笔试题
2016/03/20 面试题
成人教育自我鉴定
2013/11/01 职场文书
毕业自我鉴定
2013/11/05 职场文书
美容师的职业规划书
2013/12/27 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript