2017-09-24 9 views
0

フォルダ内のすべてのmp3曲のメタデータにアクセスしようとしています。私はUbuntu 16.04 Virtualboxとeyed3 0.6.18-1とWindowsとUbuntuの間の共有フォルダに取り組んでいます。私は次のように試しました:ループを使用してフォルダからmp3曲のid3タグにアクセスしようとしています

import os 
import eyeD3 

for root, dir, files in os.walk("home/undead/ShareWindowsTest")": 
    for file in files: 
     if file.endswith(".mp3"): 
      audiofile = eyeD3.Mp3AudioFile(file) 
      print audiofile.tag.getTitle() 

これは、フォルダ内の各曲のタイトルを印刷しています。しかし、これは機能しません。私は使ってみました

if eyed3.isMp3File(file): 

まだ運がありません。エラーは、特に "file"がmp3ファイルではなく文字列であるように見えるため、適切な入力引数ではないaudiofile = ...行にあります。私はこれに本当に新しいですし、いくつかの助けを感謝します。

+0

あなたはエラーが何を意味するかを教えていますが、理解できないと言っています。完全なエラーメッセージもコピーする必要があります。 – rodrigo

+0

/usr/bin/python2.7/home/undead/PycharmProjects/KavTest/Test1.py トレースバック(最新の最後の呼び出し): ファイル "/home/undead/PycharmProjects/KavTest/Test1.py"、25行目__init__ F =ファイル(self.fileNameで、 オーディオファイルで= eyeD3.Mp3AudioFile(ファイル) ファイル "/usr/lib/python2.7/dist-packages/eyeD3/tag.py"、ライン1653、 、 "rb"); IOError:[Errno 2]このようなファイルまたはディレクトリはありません:'01 California Dreaming(copy).mp3 ' – Undead

答えて

0

今、あなたは完全なエラーメッセージを入力したことをエラーが明確である:

No such file or directory: '01 California Dreaming (copy).mp3' 

は、コールが正しいですが、使用しているファイル名が存在しないことを意味します。あなたは考えている: "しかしそれはos.walk()から来たので、それは存在しなければならない!"はい、しかし、os.walk()は、タプルのリストを返します。それぞれの値は、root, dirs, filesです。 filesの名前のリストはrootディレクトリ内のファイル名です。

ソリューション:

for root, dir, files in os.walk("home/undead/ShareWindowsTest")": 
    for file in files: 
     path = os.path.join(root, file) 
     audiofile = eyeD3.Mp3AudioFile(path) 

PS:あなたはrootfile名を連結する必要があなたのos.walk("/home...)の大手/が不足していますか?

+0

これでエラーを修正しました。パスを追加することによって、実際にファイルを指していた "file"をリンクしていると言えるでしょうか?また、ありがとうございます:) – Undead

+0

あなたはようこそ!しかし、私はそうは思わない、_linking_は、ファイルについて話すときに、異なった、特定の意味を持っている(詳細は_hard link_または_symbolic link_を参照)。あなたのプログラム 'root'では、' file'と 'path'はあなたが望むファイルの名前(または名前の一部)を含むテキストの文字列です。実際のファイルに対して 'path' _refer_と言うこともできますし、ファイルの名前やファイル名を指定することもできます。 – rodrigo

+0

もちろん 'file'にはファイルの名前も含まれていますが、その名前は' root'に関連しているため動作しませんでした。相対名をファイル名として使用すると常に_current作業ディレクトリ_(CWD)。あなたのCWDが 'root'と等しくなければ、動作しません。 'root'と' file'を結合することによって、あなたは 'os.walk()'に渡したものに応じて、実際のCWDに相対的な絶対的な名前または名前の 'path'を作成します。 – rodrigo

関連する問題