2014-02-27 30 views
0

我試圖從我廣泛的卡拉OK集合中讀取ID3標籤,以便我可以將它們存儲在CSV文件中,以便於格式化和打印,但我是有問題真正獲得價值!我設法讓他們在這樣的格式,如果我打印的方法items()如何使用Python和Mutagen訪問這些ID3值

[('artist', [u'Steve Miller Band']), ('title', [u'Space Cowboy [Karaoke]'])] [('artist', [u'Stevie Wonder']), ('title', [u"Livin' For The City [Karaoke]"])]

我正在使用的代碼如下:

#! /usr/bin/env python2.7 
import os 
import glob 
import os.path 
import csv 

from mutagen.easyid3 import EasyID3 
from mutagen.mp3 import MP3 


#form stagger.id3 import * 

directory = os.path.normpath("C:/Users/Adrian/Music/Karaoke/Kar/*/*.cdg") 

files = glob.glob(directory) 
csvw = open('C:\\python\\karaoke.csv', 'wb') 
info = [] 
for f in files: 
    split = os.path.splitext(f) 
    newpath = split[0] + ".mp3" 
    if(os.path.isfile(newpath)): 
     audio = MP3(newpath, ID3=EasyID3) 
     stuff = audio.items() 
     print stuff 
     try: 
      print>>csvw, (stuff[0] + ", " + stuff[1] + "\r\n") 
     except: 
      print>>csvw, (os.path.basename(newpath) + "\r\n") 
     info.append(audio.items()) 

我已經使用整數訪問嘗試它們就好像它們是一個列表一樣,並且還像字典一樣字符串,但每次都會出錯。我在SE上看過一個函數items()返回一個「類似字典的對象」,但在谷歌上搜索也沒有幫助我!

回答

0

我設法解決這個問題,用了幾個小時和足夠多的cig休息時間!如果有人開始Python編程時遇到這個問題,這是我找到了解決辦法:

#! /usr/bin/env python2.7 

import os 
import glob 
import os.path 
import csv 
import string 

from mutagen.easyid3 import EasyID3 
from mutagen.mp3 import MP3 


#form stagger.id3 import * 

directory = os.path.normpath("C:/Users/Adrian/Music/Karaoke/Kar/*/*.cdg") 

files = glob.glob(directory) 
csvw = open('C:\\python\\karaoke.csv', 'wb') 
info = [] 
for f in files: 
    split = os.path.splitext(f) 
    newpath = split[0] + ".mp3" 
    if(os.path.isfile(newpath)): 
     audio = MP3(newpath, ID3=EasyID3) 
     stuff = audio.items() 
     artist = "" 
     titley = "" 
     for stu in stuff: 
      i = 0 
      for s in stu: 
       if (s == "artist"): 
        artist = filter(lambda x: x in string.printable, ''.join(stu[(i+1)])) 
        artist = artist.encode('ascii',errors='ignore') 
       if (s == "title"): 
        titley = filter(lambda x: x in string.printable, ''.join(stu[(i+1)])) 
        titley = titley.encode('ascii',errors='ignore') 

      i = i+1 
      if(artist != "" and titley != ""): 
       print>>csvw, (artist + ", " + titley + "\r\n") 

事實證明,我試圖讓數據類型是一個多維tupal,我敢仍然不完全確定它們和列表之間的區別是什麼!但是,您似乎無法像訪問其他語言的數組那樣訪問其值,例如。 value[a][b],但一些嵌套循環似乎已經完成了我的情況!在寫入CSV文件時,我也遇到了一些UTF編碼字符的重音問題,因此需要使用濾鏡。由於我發現的解決特定問題的唯一軟件(製作卡拉OK文件的歌曲列表)花費在40-60英鎊之間,或免費的卡拉OK圖書館擁有愚蠢的低限制,我將努力使用這個開源的基本GUI,所以我歡迎任何人可能想要添加的改進!