| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
MP3 tagrenamer.pyakx 02.02.08 23:02 http://mureakuha.com/koodikirjasto/1057 luettuani muistin että tein itsekin samankaltaisen. python tagrenamer.py -f "Järjestellyt\(album)\(artist)\(title)" sekomusat\*.mp3 esimerkiksi. (Suosittelen käyttämään dry-runia ennen oikeaa ajoa.)
import eyeD3,optparse,os,sys,glob,re def log(s,*e): if op.verbose: print s%e rre=re.compile(r"\{(?P<pre>[^(]*)\((?P<var>[^)]+)\)(?P<suf>[^}]*)\}") fieldmap={ "artist":"getArtist", "track":"getTrackNum", "title":"getTitle", "album":"getAlbum" } def replacer(m): vs=m.groupdict() prefix,var,suffix=vs['pre'],vs['var'],vs['suf'] if var.startswith("!"): negate=True var=var[1:] else: negate=False if "|" in var: var,fmt=var.split("|",2) else: fmt=None if var in fieldmap: val=getattr(currentTag,fieldmap[var])() else: try: val=currentTag.frames[var] except: val=None if type(val)==tuple: val=val[0] if val==None or val==u'' or val=='': exist=False else: exist=True if not exist: if negate: return prefix+suffix return "" else: if fmt: val=fmt%val else: val=val try: val=val.encode("iso-8859-1") except: pass return prefix+val+suffix forbidden="/&\\" def delforbidden(s,repl=" "): for c in forbidden: s=s.replace(c,repl) while " " in s: s=s.replace(" "," ") return s parser=optparse.OptionParser() parser.add_option("-f","--format",dest="format",default="{(track|%02d) }{(artist) - }{(title)}",help="Sets the format to rename the files to. Default: %default") parser.add_option("-d","--dry-run",action="store_true",dest="dry",default=False) parser.add_option("-v","--verbose",action="store_true",dest="verbose",default=False) op,ar=parser.parse_args() if len(ar)==0: parser.error("No files specified.") for mask in ar: if os.path.exists(mask): files=[mask] else: files=glob.glob(mask) log("Mask %s yielded %d files",mask,len(files)) for f in files: log("Processing file %s...",f) tag=eyeD3.Tag() tag.link(f) if len(tag.frames)==0: log("No frames, skipping file") else: s=op.format currentTag=tag s=delforbidden(rre.sub(replacer,s)).strip() dirname,filename=os.path.split(f) cn,cex=os.path.splitext(os.path.basename(f)) #log("%s --> %s",cn,s) if cn!=s: newname=os.path.join(dirname,s+cex) log("Renaming %s to %s...",f,newname) if not op.dry: os.rename(f,newname) else: log("Dry run, no action performed") else: log("File already named per format") akx 23:18 2.2.08 Muoks: Tuosta näyttää nykyisellään vielä puuttuvan hakemistojen luonti. os.makedirs(dirname) oikeaan paikkaan auttanee. |
![]() Haku
|