2017-09-24 82 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): 

但是還是沒有運氣。該錯誤是特別在audiofile = ...行,其中「文件」似乎是一個字符串,而不是一個MP3文件,因此不是一個適當的輸入參數。我真的很陌生,並希望得到一些幫助。現在

+0

你告訴我們你認爲錯誤的含義是什麼,但是你說你不瞭解它。您還應該複製完整的錯誤消息。 – rodrigo

+0

/usr/bin/python2.7 /home/undead/PycharmProjects/KavTest/Test1.py 回溯(最近呼叫最後): 文件「/home/undead/PycharmProjects/KavTest/Test1.py」,第25行在 的AudioFile = eyeD3.Mp3AudioFile(文件) 文件 「/usr/lib/python2.7/dist-packages/eyeD3/tag.py」,線1653,在__init__ F =文件(self.fileName ,「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, filesfiles名稱列表是root目錄中的文件名。

解決方法:你來串聯rootfile的名字:您的os.walk("/home...)是否缺少龍頭/

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?

+0

這糾正了錯誤。通過添加路徑...行來說,它將「文件」鏈接到它指向的實際文件是否正確?也非常感謝你:) – Undead

+0

不客氣!但我不這麼認爲,_linking_在討論文件時具有不同的具體含義(詳見_hard link_或_symbolic link_)。在你的程序'root'中,'file'和'path'是包含所需文件名稱(或部分名稱)的文本字符串。你可以說'路徑'指向實際的文件,或者它包含文件的名稱,甚至指向文件。 – rodrigo

+0

當然,'file'也包含文件的名稱,但它不起作用,因爲這個名字是相對於'root'的,並且當你使用相對名字作爲文件名時,它總是被解釋爲相對於_current工作目錄_(CWD)。所以除非你的CWD等於'root',否則它不起作用。根據你傳遞給'os.walk()'的內容,通過加入'root'和'file',你可以使'path'成爲絕對名稱或者是相對於實際CWD的名稱。 – rodrigo

相關問題