我正在尝试通过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
我的猜测是我没有正确查看文件?我是否需要使用某种类型的os库来正确查看Windows 7的这些文件ID3数据?非常感谢任何帮助。
感谢。
答案 0 :(得分: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 libs因为有缺陷和气质而闻名,所以期待破坏或奇怪的行为;不幸的是,由于ID3是一个指定不完整的非标准的角落案例和奇怪的实现。)
答案 1 :(得分:2)
我的建议是不要反复使用反斜杠。 Windows中的Python将使用正斜杠接受路径。
接下来,不要忘记带文件的.mp3扩展名。 Mutagen / Python 非常特定于文件的确切位置。如果您不确定文件名或扩展名是什么,请随意在交互式shell中使用以下代码片段进行检查:
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"
答案 2 :(得分:2)
这是一个Windows的东西(虽然不是真正的Windows故障)。 将这些行添加到代码的顶部,它将报告正确的mime类型。
import mimetypes
mimetypes.init([])
有关详细信息,请参阅http://bugs.python.org/issue10551