Управление метаданными .mp3 с помощью Python в Windows 7 - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь отредактировать некоторые теги ID3 MP3-файлов через Python.Я провел некоторые исследования и нашел библиотеки мутагенов и eyeD3.Однако я столкнулся с похожими проблемами с обеими этими библиотеками.Обе реализации жалуются, что предоставленный мною файл либо не существует, либо не является файлом .mp3.

Я скачал Mp3tag (http://www.mp3tag.de/en/download.html) и подтвердил, что предоставленный мною файл помечен как ID3v2.3 (ID3v1 ID3v2.3), и это файл .mp3.

Ниже приведен код мутагена, за которым следует сообщение об ошибке:

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'

Теперь, когда я пытаюсь просмотретьДанные ID3 с использованием eyeD3, я испытываю следующее:

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 файлы для Windows7? Любая помощь очень ценится.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 10 января 2012

Когда вы работаете с путями Windows в Python, у вас есть три варианта:

  • экранировать все обратные косые черты с дополнительным ("C:\\mydir\\myfile.mp3")
  • , указав его как «raw»"строка (r'C:\mydir\myfile.mp3' - обратите внимание на начальное" r ")
  • использовать косую черту.Некоторым библиотекам это может не понравиться.

Всякий раз, когда вы манипулируете путями, вы всегда должны использовать функции в модуле os.path, например, os.path.join(r'C:\mydir','myfile.mp3')

(как примечаниечто ID3-библиотеки, такие как мутаген, известны как глючные и темпераментные, поэтому ожидайте поломок или странного поведения; это, к сожалению, из-за того, что ID3 является плохо заданным нестандартным, полным угловых случаев и странных реализаций.)

2 голосов
/ 31 января 2013

Это вещь Windows (хотя на самом деле это не вина Windows). Добавьте эти строки в начало вашего кода, и он сообщит правильные типы пантомимы.

import mimetypes
mimetypes.init([])

Подробнее см. http://bugs.python.org/issue10551

2 голосов
/ 09 января 2012

Мой совет - даже не связываться с обратной косой чертой. Python в Windows прекрасно примет путь с косой чертой.

Далее, не забудьте расширение .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"

...