2012-01-09 55 views
0

我試圖通過Python編輯某些MP3文件的ID3標籤。我做了一些研究,並找到了誘變劑和eyeD3文庫。但是,我遇到了與這兩個庫類似的問題。這兩個實現都抱怨我提供的文件不存在,或者不是.mp3文件。在Windows 7中使用Python操作.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' 

現在,當我嘗試使用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 

我的猜測是我沒有正確查看文件?我是否需要使用某種類型的操作系統庫來正確查看Windows 7的這些文件ID3數據?任何幫助是極大的讚賞。

謝謝。

+3

\是Python轉義字符。你可以在你的文件名中使用兩個\或者用r'C:\ Users \ 557319 ...' – 2012-01-09 19:29:33

回答

4

當你處理在Python的Windows路徑,你有三個選擇:

  • 逃避所有的反斜線有一個額外的一個("C:\\mydir\\myfile.mp3"
  • 將其指定爲「原始」的字符串(r'C:\mydir\myfile.mp3' - 注意開頭的「R」)
  • 使用正斜槓。有些庫可能不喜歡它。

無論何時操作路徑,都應該始終使用os.path模塊中的函數,例如, (請注意,像誘變劑這樣的ID3庫被認爲是越野車和脾氣暴躁的,所以期望破損或怪異的行爲;這很不幸,因爲ID3是一個很不規範的非標準的充滿角落的情況,奇怪的實現。)

+0

我強烈建議您[閱讀Mutagen](http://code.google.com/p/mutagen/),因爲它是那裏最強大的ID3庫之一。它和Python一樣,只是想在它試圖做任何事情之前確保文件存在。 – Makoto 2012-01-09 21:08:06

+0

對不起,我不想貶低誘變劑:)它僅僅是關於ID3的操縱 - 在那裏操作庫。絕大多數人非常狡猾;即使誘變劑也明確表示他們的目標只是iTunes,因爲做更多事情根本不值得 - 它總會有某種奇怪的玩家以不同的方式解釋標準。當然,與具體問題無關:) – 2012-01-09 21:15:34

2

我的建議是甚至沒有混淆反斜槓。在Windows中的Python將接受一個正確的路徑正斜槓。

接下來,不要忘記文件的.mp3擴展名。誘變劑/ 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"

+0

'C:\ Users \ 557319 \ Music \ Trance \ Paul van Dyk - We Together Together(Arty Remix)www.freshnewtracks .com.mp3' – Bogdacutu 2012-01-09 20:05:40

+0

如果這是完整的路徑,那麼你會用它來創建'MP3()'對象。不要忘記擴展名! – Makoto 2012-01-09 20:07:08

2

這是一個Windows的東西(雖然不是Windows的故障)。 將這些行添加到代碼的頂部,它會報告正確的MIME類型。

import mimetypes 
mimetypes.init([]) 

http://bugs.python.org/issue10551更多信息