Привет всем! Вот, нашаманил сабж, без нормальных знаний питона это был хардкор, но что делать только c eyeD3 + id3py добился желаемого, все готовые скрипты что я видел, работают с чётко заданными TIT2, TALB... и т.д., это не устраивало, т.к. есть всякие комменты там и другое,да и не определялась версия тэгов в них. То что вы сечас увидите это конечно полный ****ец, но мне нраицца:), и работает даже... Итак: #!/usr/bin/python from eyeD3 import * import eyeD3.frames import eyeD3.tag from eyeD3.tag import * from eyeD3.frames import * import eyeD3.utils from id3py import id3 from id3py import id3, exception import sys, traceback, os, time, re, locale import codecs, encodings from string import atoi, split # init top = "./" mp3Re = re.compile("[.]*\.mp3") mp3Files = [] allUnsupported = [] # find all mp3 files in the top directory and all sub-directories for root, dirs, files in os.walk(top, topdown=True): for name in files: fullName = os.path.join(root, name) if mp3Re.search(fullName) != None: mp3Files.append(fullName) print "Found %s files." %(len(mp3Files)) # iterate mp3 files for file in mp3Files: print "File: %s" %(file) try: # read tag and measure time start = time.time() t = id3.readTag(file) end = time.time() print "Analysis took %f seconds" %(end - start) # no tag found if t == None: print "No tag found!" # tag found else: print "Tag found!" unsupported = [] # all unsupported frame types for the current tag # print tag information print "Version: %d.%d" %(t.version[0], t.version[1]),", Flags: %d" %(int(t.flags)),", Size: %d" %(t.size),", Padding: %d" %(t.padding),", Frames: %s" %(t.frames.keys()) textframe = []#the frame table textframeid = []#the frameid table i = 0 print len(t.frames.keys()) # iterate frames for f in t: # text information frame if f.id[0] == "T": print i, "------", "%s: %s" %(f.id, unicode(f.text, 'cp1251')) textframe.insert(i, unicode(f.text, 'cp1251')) textframeid.insert(i, f.id) i += 1 #url link frame elif f.id[0] == "W": print "%s: %s" %(f.id, f.url) # other frames else: print "%s: %d" %(f.id, f.size) if f.id == "COMM": # comment frame print i, ':' , unicode(f.comment, 'cp1251') #just set your encoding textframe.insert(i, unicode(f.comment, 'cp1251')) textframeid.insert(i, f.id) i += 1 # check wether the frame is supported by the library if not f.id in id3.frames: unsupported.append(f.id) print "___________________" for u in unsupported: if allUnsupported.count(u) == 0: allUnsupported.append(u) # EyeD3 start if eyeD3.tag.isMp3File(file): #check for mp3 files tag = None; tag = eyeD3.Tag(file); tag.link(file); print tag.getVersionStr() # #remove id3v2.4 tag, update & set utf8 encoding if tag.getVersionStr != "None" or "v2.4": tag.remove(ID3_ANY_VERSION); tag.update(ID3_V2_4) tag.setTextEncoding(UTF_8_ENCODING) print "--------", tag.getVersionStr()# securecheck #set the id3 text fields for j in range(i): print("---------"), j, #f.text[j] print "%s : %s" %(textframeid[j], textframe[j]) #set the comment field if textframeid[j] == "COMM": print "!!!" tag.removeComments() tag.update(ID3_V2_4) tag.addComment(textframe[j], '', 'rus')#if you need, set your lang:) else:tag.setTextFrame(textframeid[j], textframe[j]) #and the endcheck... print tag.getTitle(), tag.getArtist(), tag.getAlbum(), tag.getYear(), tag.getComment() tag.update() #eyeD3 has done the job...""" # catch the exceptions thrown by this library when reading the tag except exception.ID3LibException, e: print "Error: %s[%s]" %(e, e.__class__) if e.source != None: print "Cause: %s[%s]" %(e.source, e.source.__class__) # catch other exceptions, shouldn't happen normally except Exception, e: print "Error: %s[%s]" %(e, e.__class__) traceback.print_exc(sys.stdout) print "All unsupported frames: %s" %(allUnsupported) print "________________________________________________________" print Вот и всё Всякие разделительные строки типа: print "---------", это чтобы вывод проще разбирать. Я знаю что это ужасно грязно и просто ужасно, но если всё-таки есть комментарии по существу, то я буду очень рад...
Ответ на:
комментарий
от theserg
Ответ на:
комментарий
от Kwintruder
Ответ на:
комментарий
от Kwintruder
Ответ на:
комментарий
от theserg
Ответ на:
комментарий
от bugmaker
Ответ на:
комментарий
от redvasily
Ответ на:
комментарий
от Kwintruder
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [Slackware] What's new in /etc ? (2009)
- Форум init.d запускает 2 процесса при тесте. при ребуте сервис не запускается (2015)
- Форум Описание первого фрейма mp3 с VBR (2014)
- Форум mp3 тэги (2006)
- Форум mp3 тэги (2007)
- Форум Проблема с перекодировкой mp3-тэгов в mp3blaster (2004)
- Форум Версия для слабовидящих на JavaScript + CSS (2018)
- Форум Написал граббер анонимных прокси (2011)
- Форум перекодировка в mp3 (2009)
- Форум pygtk не могу вывести данные в gtk.Entry() (2013)