最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python如何使用struct.unpack處理二進(jìn)制文件

 更新時(shí)間:2024年02月10日 10:10:29   作者:AllardZhao  
這篇文章主要介紹了Python如何使用struct.unpack處理二進(jìn)制文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如何處理二進(jìn)制文件?

實(shí)際案例

  • wav是一種音頻文件的格式,音頻文件為二進(jìn)制文件。
  • wav文件由頭部信息和音頻采樣數(shù)據(jù)構(gòu)成,前44個(gè)字節(jié)為頭部信息,包含聲道數(shù)、采樣頻率、PCM位寬等等,后面是音頻采樣數(shù)據(jù)。
  • 使用python分析一個(gè)wav文件頭部信息,處理音頻數(shù)據(jù)。

WAV格式如下:

簡(jiǎn)單分為兩部分,第一部分前44個(gè)字節(jié)是音頻文件的一些信息,第二部分44個(gè)字節(jié)后面是音頻文件的采樣數(shù)據(jù)。

解決方案

  • open函數(shù)想以二進(jìn)制模式打開文件,指定mode參數(shù)為'b'。
  • 二進(jìn)制數(shù)據(jù)可以用fromfile(Python2中可以使用readinto),讀入到提前分配好的buffer中,便于數(shù)據(jù)處理。
  • 解析二進(jìn)制數(shù)據(jù)可以使用標(biāo)準(zhǔn)庫(kù)中的struct模塊的unpack方法。

代碼演示

(1)struct.unpack方法簡(jiǎn)單使用

# 以二進(jìn)制形式打開文件
f = open('微信語(yǔ)音視頻.wav', 'rb')
# 讀取前44字節(jié)
info = f.read(44)
print(info)
 
import struct
 
'''
struct.unpack方法介紹:
    unpack(format, buffer)
    format:解析類型
    buffer:需要解析二進(jìn)制串
    例: 構(gòu)造兩個(gè)字節(jié)的二進(jìn)制串,format默認(rèn)為小端字節(jié)順序,
        h為16為,結(jié)果:2*256+1=513
        struct.unpack('h', b'\x01\x02')
        指定format為大端字節(jié)順序,結(jié)果:256+2=258
        struct.unpack('>h', b'\x01\x02')
'''
# print(help(struct.unpack))
# 解析聲道數(shù),Num Channels為22到24字節(jié)
print(struct.unpack('h', info[22:24]))
# 解析采樣頻率,SampleRate為24到28字節(jié),i為int類型
print(struct.unpack('i', info[24:28]))
# 編碼寬度,BitsPerSample為34到36字節(jié)
print(struct.unpack('h', info[34:36]))

(2)實(shí)現(xiàn)二進(jìn)制文件wav的處理

# _*_ encoding:utf-8 _*_
import array
 
'''
讀取data數(shù)據(jù)部分不希望是字符串形式,因?yàn)樽址恢С謹(jǐn)?shù)學(xué)運(yùn)算,
對(duì)它不方便數(shù)據(jù)處理,最好讀取到類似于C語(yǔ)言中數(shù)組中去
'''
 
# 修改文件指針移動(dòng)到文件末尾
f.seek(0, 2)
# 報(bào)告文件指針,也就是文件大小
print(f.tell())
# 數(shù)組的長(zhǎng)度為文件字節(jié)長(zhǎng)度減去44個(gè)字節(jié),除2為采樣寬度
n = (f.tell() - 44) // 2
 
# 創(chuàng)建數(shù)組,儲(chǔ)存data部分?jǐn)?shù)據(jù)
buf = array.array('h', [])
 
# 將文件的數(shù)據(jù)讀入到buf當(dāng)中,不返回字符串
f.seek(44)
buf.fromfile(f, n)
print(buf[0])
print(len(buf))
# 將采樣縮小一定程度,最終體現(xiàn)就是聲音變小
for i in range(n):
    buf[i] //= 8
# 將數(shù)據(jù)存入到一個(gè)新文件
f2 = open('demo.wav', 'wb')
f2.write(info)
buf.tofile(f2)
f2.close()

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中的異常處理:try?except?Exception?as?e解決辦法

    Python中的異常處理:try?except?Exception?as?e解決辦法

    這篇文章主要介紹了Python中的異常處理機(jī)制,包括try、except、finally語(yǔ)句的基本用法和高級(jí)用法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Python 備份程序代碼實(shí)現(xiàn)

    Python 備份程序代碼實(shí)現(xiàn)

    這篇文章主要介紹了Python 備份程序代碼實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • python中圖片轉(zhuǎn)換為pdf實(shí)現(xiàn)方法

    python中圖片轉(zhuǎn)換為pdf實(shí)現(xiàn)方法

    本文主要介紹了使用Python的Pillow分支和reportlab庫(kù)將圖片轉(zhuǎn)換為PDF文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • python多項(xiàng)式擬合之np.polyfit 和 np.polyld詳解

    python多項(xiàng)式擬合之np.polyfit 和 np.polyld詳解

    這篇文章主要介紹了python多項(xiàng)式擬合之np.polyfit 和 np.polyld的實(shí)例代碼,python數(shù)據(jù)擬合主要可采用numpy庫(kù),庫(kù)的安裝可直接用pip install numpy等,需要的朋友跟隨小編一起學(xué)習(xí)吧
    2020-02-02
  • 使用Python獲取公眾號(hào)下所有的文章

    使用Python獲取公眾號(hào)下所有的文章

    我比較喜歡看公眾號(hào),有時(shí)遇到一個(gè)感興趣的公眾號(hào)時(shí),都會(huì)感覺相逢恨晚,想一口氣看完所有歷史文章。本文主要介紹了使用Python獲取公眾號(hào)下所有的文章,感興趣的可以了解一下
    2021-06-06
  • 關(guān)于DataFrame中某列值的替換map(dict)

    關(guān)于DataFrame中某列值的替換map(dict)

    這篇文章主要介紹了關(guān)于DataFrame中某列值的替換map(dict),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python實(shí)現(xiàn)調(diào)用攝像頭并拍照發(fā)郵箱

    python實(shí)現(xiàn)調(diào)用攝像頭并拍照發(fā)郵箱

    這篇文章主要介紹了python實(shí)現(xiàn)調(diào)用攝像頭并拍照發(fā)郵箱的程序,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • 淺析Python與Java和C之間有哪些細(xì)微區(qū)別

    淺析Python與Java和C之間有哪些細(xì)微區(qū)別

    這篇文章主要介紹了Python與Java和C之間有哪些細(xì)微區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • python調(diào)用攝像頭顯示圖像的實(shí)例

    python調(diào)用攝像頭顯示圖像的實(shí)例

    今天小編就為大家分享一篇python調(diào)用攝像頭顯示圖像的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 詳解OpenCV-Python?Bindings如何生成

    詳解OpenCV-Python?Bindings如何生成

    這篇文章主要為大家介紹了OpenCV-Python?Bindings如何生成過(guò)程解析以及如何將新的OpenCV模塊擴(kuò)展到Python,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評(píng)論

辉南县| 且末县| 元朗区| 荣成市| 镇巴县| 新蔡县| 永昌县| 文昌市| 河源市| 阳城县| 都安| 夹江县| 商都县| 安平县| 峨边| 平度市| 司法| 桑植县| 饶平县| 鲁山县| 托克托县| 紫阳县| 利川市| 阿图什市| 珲春市| 天等县| 凤庆县| 突泉县| 二连浩特市| 宁化县| 嘉义县| 东乌| 乌拉特后旗| 壤塘县| 罗山县| 高碑店市| 塘沽区| 东方市| 务川| 城固县| 虞城县|