`

【转】python处理二进制数据

 
阅读更多
转至:http://blog.chinaunix.net/uid-26354188-id-3192270.html

#!/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()
分享到:
评论

相关推荐

    Python3.7.2中文文档-标准库-Python二进制数据服务

    以上就是Python 3.7.2标准库中处理二进制数据服务的关键模块及其功能。理解和熟练使用这些工具,能够帮助开发者更好地处理各种复杂的二进制数据任务,无论是在网络通信、文件操作还是数据存储中。

    python处理二进制数据的方法

    本文实例讲述了python处理二进制数据的方法。分享给大家供大家参考。具体如下: #!/usr/env/env python #-*- coding: cp936 -*- ''''' add Head Infomation for pcm file ''' import sys import struct import os _...

    【Python资源】进制通用转换类 基于Python实现,可实现十进制转换二进制、十进制转换八进制、十进制转换十六进制等转换

    本资源是一个Python编写的进制通用转换类,它提供了将十进制数转换为二进制、八进制、十六进制,以及将十六进制数转换为十进制的功能。这个类对于需要进行进制转换的开发者来说非常有用,因为它简化了进制转换的过程...

    Python实现的通用的二进制数据分析工具,分析任意格式的二进制数据,还能同时查看协议文档

    对于非专业人士来说,直接处理二进制数据可能会相当困难,因为它们通常没有人类可读的结构。因此,拥有一个工具来解析和解释这些数据至关重要。 该工具提供了逐字节和逐位分析的功能,这意味着用户可以细致入微地...

    图像处理-图片转二进制工具

    标题中的“图像处理-图片转二进制工具”是指一个应用程序,它能够将图像文件转换成二进制数据格式。这种工具通常用于编程或Web开发,以便以更直接的方式处理和展示图片。图像数据在计算机中是以像素的颜色值表示的,...

    redis存储二进制数据测试代码

    Redis,作为一个高性能的键值对数据存储系统,不仅支持简单的字符串、整数和浮点数等数据类型,还能够处理二进制数据。在实际应用中,存储和处理二进制数据是常见的需求,比如图片、音频、视频的元数据或者数据库的...

    通过二进制数据流的方式,读写图片,把图片存入数据库

    二进制数据流(Binary Data Stream)是一种处理原始二进制数据的方式,它允许程序以流的形式处理数据,而非一次性加载整个文件到内存。在处理大文件如图片时,这种方式非常高效,避免了内存溢出的问题。二进制数据流...

    API POST发送数据支持二进制

    提供的`POST.bas`文件可能是Basic语言的一个模块,它可能包含了使用Basic语言实现POST请求,特别是处理二进制数据的代码。基本步骤可能包括创建HTTP请求,设置Content-Type,编码二进制数据,然后发送请求。 7. **...

    Python实现将matlab生成的有符号浮点型数据转化为二进制数据.docx

    标题中的“Python实现将matlab生成的有符号浮点型数据转化为二进制数据”指的是使用Python编程语言处理由MATLAB生成的具有符号的浮点数值,并将其转换为二进制格式。MATLAB是一种广泛使用的科学计算软件,它通常生成...

    将二进制文件转换为16进制

    而十六进制(Hexadecimal)是一种逢16进1的进位制,用0-9和A-F这16个符号来表示,方便人类理解和处理二进制数据。在编程中,二进制和十六进制之间转换非常常见,特别是在处理底层数据、内存分析或调试时。 在"VC"...

    读取二进制文件,byte[]转int型

    如果跨平台处理二进制数据,需要确保正确处理字节顺序。 对于初学者来说,理解这些基本概念非常重要,因为它们是许多高级编程技术的基础,如网络通信、序列化和数据交换。同时,阅读和理解提供的代码文档(如`读取...

    python 对二进制文件的解析

    处理二进制数据时,我们通常会用到`bytes`和`bytearray`类型。`bytes`是不可变的,而`bytearray`允许修改其内容。我们可以使用索引来访问和修改单个字节,或者使用切片操作来处理一部分字节。 ```python # 转换为...

    3维数据stl文件从文本格式转换到二进制格式

    二进制格式的STL文件则将数据紧凑地存储为二进制数据,减少了文件大小,提高了读取和处理效率。在二进制STL文件中,每个三角面片的数据用固定长度的字节块表示,包括3个浮点数(用于描述法向量)和9个浮点数(用于...

    python-二进制读写.docx

    当需要处理结构化的二进制数据时,Python的`struct`模块非常有用。它可以将Python对象转换为二进制数据,反之亦然。例如,你可以将一个整数打包为4字节的二进制字符串: ```python import struct data = ...

    二进制数据解码工程.rar_bottlevw8_closelyeuv_二进制数据解码_二进制解码_解码数据文件

    这个过程可能涉及到编程语言如C++、Python等,以及专用的工具或库,例如在Python中,我们可以使用struct模块来处理二进制数据,或者在Java中使用DataInputStream类进行解码。 压缩包中的"二进制数据解码工程"文件很...

    16进制 十进制 八进制与二进制数之间的相互转换

    计算机内部所有的数据都是以二进制形式存储和处理的,因为它的逻辑电路易于实现。 2. **八进制(Octal)**: 基数为8,用数字0-7来表示。八进制常用于简化二进制表示,因为一个八进制数字可以表示三个二进制位。 3....

    读取写入二进制数据

    在计算机科学中,二进制数据是所有信息的基础表示形式,无论是文本、图像...在处理二进制数据时,确保对数据格式有深入理解,以避免数据丢失或损坏。通过练习和实践,您将能够熟练地在各种场景下进行二进制数据的操作。

    16进制转换成二进制

    了解这两种进制之间的转换对于理解计算机内部的工作原理至关重要,因为计算机底层数据存储和处理通常都是以二进制形式进行的。 16进制转换成二进制的过程可以通过以下几个步骤完成: 1. **单个十六进制数字转换**...

    python读写二进制文件的方法

    通过本文的介绍,我们学习了Python中处理二进制文件的基本方法,包括如何读取和写入二进制数据,以及使用`struct`模块进行更高级的数据操作。掌握这些技能对于处理复杂的数据格式非常有用。希望这些知识能帮助你在...

Global site tag (gtag.js) - Google Analytics