在Windows 7中使用Python操作.mp3元数据

0 投票
3 回答
1595 浏览
提问于 2025-04-17 09:52

我正在尝试通过Python编辑一些MP3文件的ID3标签。我做了一些研究,发现了mutagen和eyeD3这两个库。但是,我在使用这两个库时遇到了类似的问题。它们都提示我提供的文件不存在,或者不是一个.mp3文件。

我下载了Mp3tag(http://www.mp3tag.de/en/download.html),确认我提供的文件是标记为ID3v2.3(ID3v1 ID3v2.3),并且确实是一个.mp3文件。

下面是我用mutagen写的代码,以及我收到的错误信息:

from mutagen.mp3 import MP3

audio = MP3("C:\Users\557319\Music\Trance\Paul van Dyk - We Come Together (Arty Remix)")
print audio.info.length, audio.info.bitrate

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    audio = MP3("C:\Users\557319\Music\Trance\Paul van Dyk - We Come Together (Arty Remix)  www.freshnewtracks.com.mp3")
  File "C:\Python27\lib\site-packages\mutagen\__init__.py", line 75, in __init__
    self.load(filename, *args, **kwargs)
  File "C:\Python27\lib\site-packages\mutagen\id3.py", line 1995, in load
    try: self.tags = ID3(filename, **kwargs)
  File "C:\Python27\lib\site-packages\mutagen\id3.py", line 74, in __init__
super(ID3, self).__init__(*args, **kwargs)
  File "C:\Python27\lib\site-packages\mutagen\_util.py", line 105, in __init__
    super(DictProxy, self).__init__(*args, **kwargs)
  File "C:\Python27\lib\site-packages\mutagen\__init__.py", line 39, in __init__
    self.load(*args, **kwargs)
  File "C:\Python27\lib\site-packages\mutagen\id3.py", line 109, in load
    self.__fileobj = file(filename, 'rb')
IOError: [Errno 2] No such file or directory: 'C:\\Userso319\\Music\\Trance\\Paul van Dyk - We Come Together (Arty Remix) www.freshnewtracks.com.mp3'

现在,当我尝试使用eyeD3查看ID3数据时,我遇到了以下问题:

import eyeD3

trackInfo = eyeD3.Mp3AudioFile("C:\Users\557319\Music\Trance\Paul van Dyk - We Come Together (Arty Remix) www.freshnewtracks.com")

Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
trackInfo = eyeD3.Mp3AudioFile("C:\Users\557319\Music\Trance\Paul van Dyk - We Come Together (Arty Remix) www.freshnewtracks.com")
  File "C:\Python27\lib\site-packages\eyeD3\tag.py", line 1618, in __init__
    raise InvalidAudioFormatException("File is not mp3");
InvalidAudioFormatException: File is not mp3

我猜我可能没有正确查看文件?我是否需要使用某种操作系统库来正确查看这些文件的ID3数据,以适应Windows 7?非常感谢任何帮助。

谢谢。

3 个回答

2

这是一个与Windows有关的问题(其实不完全是Windows的错)。

在你的代码顶部添加这些几行,就能正确报告文件的类型。

import mimetypes
mimetypes.init([])

想了解更多信息,可以查看这个链接:http://bugs.python.org/issue10551

2

我的建议是,不要去碰反斜杠。在Windows系统的Python中,使用正斜杠也能正常接受路径。

接下来,别忘了文件名后面要加上.mp3的后缀。Mutagen/Python对文件的具体位置要求非常严格。如果你不确定文件名或者后缀是什么,可以在交互式命令行中使用下面的代码来检查:

import os
os.listdir('C:/Userso319/Music/Trance/')

这样你就能看到那个目录下所有文件的列表,包括它们的后缀。

所以,如果这个文件的实际名称是这样的,你的新路径就变成:

"C:/Users/557319/Music/Trance/Paul van Dyk - We Come Together (Arty Remix) www.freshnewtracks.com.mp3"

4

在Python中处理Windows路径时,你有三种选择:

  • 用一个额外的反斜杠来转义所有的反斜杠(比如:"C:\\mydir\\myfile.mp3"
  • 把它指定为“原始”字符串(比如:r'C:\mydir\myfile.mp3',注意开头有个“r”)
  • 使用正斜杠。有些库可能不太喜欢这样。

每当你处理路径时,最好使用os.path模块里的函数,比如:os.path.join(r'C:\mydir','myfile.mp3')

顺便提一下,像mutagen这样的ID3库常常会有bug和不稳定的表现,所以你可能会遇到一些问题或奇怪的行为;这主要是因为ID3标准不够明确,里面有很多边缘情况和奇怪的实现。

撰写回答