如何从Python中的二进制MP3文件中读取特定字节?

问题描述 投票:1回答:1

我会学习处理读写二进制数据。我知道我可以打开一个二进制文件

f = open(myfile, mode='rb')
fb = f.read()
f.close()
return fb

如何在具有以下结构的mp3文件中访问和读取$ A7- $ AC范围:Lame mp3 Tags

python mp3 binaryfiles lame
1个回答
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包这样的东西。

© www.soinside.com 2019 - 2024. All rights reserved.