2017-08-15 150 views

回答

1

你應該看看Python的struct庫,用於提取二進制數據。

import struct 

mp3_filename = r"my_mp3_file.mp3" 

with open(mp3_filename, 'rb') as f_mp3: 
    mp3 = f_mp3.read() 
    entry = mp3[0xA7:0xAC+1] 
    print struct.unpack("{}b".format(len(entry)), entry) 

這將使你的整數,如清單:

(49, 0, 57, 0, 57, 0)   

你傳遞一個格式字符串來告訴Python如何解讀爲此每個字節。在這個例子中,它們都是簡單地從字節轉換成整數。每個格式說明符都可以有重複計數,所以對於您的示例,格式字符串將是"6b"。如果您想將其解碼爲單詞,則只需更改格式說明符即可,還有一整套選項可以幫助您:Struct format characters

要將它們轉換爲零,您需要關閉文件並重新打開寫作。建立一個新的輸出如下:

import struct 

mp3_filename = r"my_mp3_file.mp3" 
zeros = "\0\0\0\0\0\0" 

with open(mp3_filename, 'rb') as f_mp3: 
    mp3 = f_mp3.read() 
    entry = mp3[0xA7:0xAC+1] 
    print struct.unpack("{}B".format(len(entry)), entry) 

    if entry != zeros: 
     print "non zero" 

with open(mp3_filename, 'wb') as f_mp3: 
    f_mp3.write(mp3[:0xA7] + zeros + mp3[0xAD:]) 

供參考:有現成的Python庫,能夠從MP3文件中提取標籤信息。看看類似id3reader包。

+0

非常感謝。由此產生的整數對我來說是完美的。我只希望檢查是否不存在0.但是,如何將這些字節替換爲例如零並將其寫回文件? – xpilgrim

+0

恕我直言,id3reader包不適合這個,而這些是來自lame標籤,而不是id3標籤的字段。 – xpilgrim

+0

您將需要以二進制寫入模式重新打開mp3文件,並用零替換該部分。我已經更新了答案。 –

相關問題