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

标签 python mp3 binaryfiles lame

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

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

如何访问和读取具有以下结构的 mp3 文件中的 $A7-$AC 范围: 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 包之类的东西。

关于python - 如何在Python中从二进制MP3文件中读取特定字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45688014/

相关文章:

Python - 如何查找多维数组中是否存在某个项目?

python 列表理解 : return a list of strings instead of a list of lists

Android - 从 byte[] 数组播放 mp3

audio - 网站还可以自定义Flash mp3播放器吗?

iOS - 无法播放音频文件

pdf - 在 Mac 上使用 Preview,为什么不做任何更改而简单地保存 PDF 会完全改变文件的内容?

python - 任意数量的用户输入到函数中

python - 标准化/缩放作为 python 中的预处理步骤

c++ - 双字节交换

c++ - ios::trunc 如何在 C++ 中为二进制文件工作?