0

Python を使用して特定の MP3 ファイル ID3 タグを編集しようとしています。私はいくつかの調査を行い、変異原と 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'

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 で正しく表示するには、ある種の OS ライブラリを使用する必要がありますか? どんな助けでも大歓迎です。

ありがとう。

4

3 に答える 3

4

Python で Windows パスを処理する場合、次の 3 つのオプションがあります。

  • "C:\\mydir\\myfile.mp3"追加のバックスラッシュ ( )ですべてのバックスラッシュをエスケープします。
  • 「生の」文字列として指定します(r'C:\mydir\myfile.mp3'-- 最初の「r」に注意してください)
  • スラッシュを使用します。一部のライブラリはそれを好まない場合があります。

パスを操作するときは常に、os.pathモジュール内の関数を使用する必要があります。os.path.join(r'C:\mydir','myfile.mp3')

(余談ですが、mutagen のような ID3 ライブラリはバグが多く気まぐれであることが知られているため、破損や奇妙な動作が予想されます。残念ながら、これは ID3 が不十分に指定された非標準であり、特殊なケースや奇妙な実装がたくさんあるためです。)

于 2012-01-09T20:29:57.990 に答える
2

これはWindowsの問題です(実際にはWindowsの障害ではありませんが)。これらの行をコードの先頭に追加すると、正しいmimeタイプが報告されます。

import mimetypes
mimetypes.init([])

詳細については、 http://bugs.python.org/issue10551を参照してください。

于 2013-01-31T01:12:26.147 に答える
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"

于 2012-01-09T19:54:53.063 に答える