1
我會學會處理讀取和寫入二進制數據。我知道,我可以打開一個二進制文件與如何在Python中讀取二進制MP3文件中的特定字節?
f = open(myfile, mode='rb')
fb = f.read()
f.close()
return fb
我如何與這種結構訪問和讀取$ A7- $ AC範圍內的MP3文件: Lame mp3 Tags
我會學會處理讀取和寫入二進制數據。我知道,我可以打開一個二進制文件與如何在Python中讀取二進制MP3文件中的特定字節?
f = open(myfile, mode='rb')
fb = f.read()
f.close()
return fb
我如何與這種結構訪問和讀取$ A7- $ AC範圍內的MP3文件: Lame mp3 Tags
你應該看看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.但是,如何將這些字節替換爲例如零並將其寫回文件? – xpilgrim
恕我直言,id3reader包不適合這個,而這些是來自lame標籤,而不是id3標籤的字段。 – xpilgrim
您將需要以二進制寫入模式重新打開mp3文件,並用零替換該部分。我已經更新了答案。 –