#! /usr/bin/python # -*- coding: utf-8 -*- # Credits to Adolfo González Blázquez , the author of pyRenamer , as I copied some code from it # Dependencies - zenity import os import re import sys import time choice = "" pattern = "" replace = "" replaceWith = "" prefix = "" suffix = "" count = 1 def choiceDialog(): global choice,pattern,replace,replaceWith,prefix,suffix #Main DialogBox choice = os.popen('zenity --list --title "Renamer"\ --radiolist --column " " --column "Choose One"\ FALSE "Patternize" FALSE "Substitute" FALSE "Misc" FALSE "Undo Last Operation ( INSIDE THIS FOLDER )"').read().split('\n')[0] #SubDialogBoxs if choice == "Patternize": pattern = os.popen('zenity --title "Renamer" --entry --text "For more infomation on patterns, read readme.txt.\nEnter the pattern:"').read().split('\n')[0] elif choice == "Substitute": choice = os.popen('zenity --list --title "Renamer"\ --radiolist --column " " --column "Choose One"\ FALSE "SPACE to UNDERSCORE" FALSE "UNDERSCORE to SPACE" FALSE "DASH to SPACE" FALSE "SPACE to DASH" \ FALSE "Replace Manually"').read().split('\n')[0] if choice == "Replace Manually": replace = os.popen('zenity --title "Renamer" --entry --text "Enter the word (phrase) you want to replace"').read().split('\n')[0] replaceWith = os.popen('zenity --title "Renamer" --entry --text "Replace that word With ?"').read().split('\n')[0] elif choice == "Misc": choice = os.popen('zenity --list --title "Renamer"\ --radiolist --column " " --column "Choose One"\ FALSE "ALL CAPITAL" FALSE "all lower" FALSE "First letter uppercase" FALSE "First Letter Uppercase In Each Word"\ FALSE "Add a Prefix" FALSE "Add a Suffix"').read().split('\n')[0] if choice == "Add a Prefix": prefix = os.popen('zenity --title "Renamer" --entry --text "Enter the prefix:"').read().split('\n')[0] elif choice == "Add a Suffix": suffix = os.popen('zenity --title "Renamer" --entry --text "Enter the suffix:"').read().split('\n')[0] elif choice == "Undo Last Operation in this Folder": #Undo undo() else: raise SystemExit def getNewName(oldname,path,first): global prefix,suffix,replace,count,replaceWith,pattern if choice == "SPACE to UNDERSCORE": newname = oldname.replace(' ', '_') elif choice == "UNDERSCORE to SPACE": newname = oldname.replace('_',' ') elif choice == "DASH to SPACE": newname = oldname.replace('-',' ') elif choice == "SPACE to DASH": newname = oldname.replace(' ','-') elif choice == "Replace Manually": newname = oldname.replace(replace,replaceWith) elif choice == "ALL CAPITAL": newname = oldname.upper() elif choice == "all lower": newname = oldname.lower() elif choice == "First letter uppercase": newname = oldname.capitalize() elif choice == "First Letter Uppercase In Each Word": newname = oldname.title() elif choice == "Add a Prefix": newname = prefix + oldname elif choice == "Add a Suffix": #Place suffix before the extension if it got ... if oldname.find('.') != -1: newname = oldname.split('.')[0] + suffix + '.' + oldname.split('.')[1] else: newname = oldname + suffix elif choice == "Patternize": newname = pattern #for number substiution c = re.compile(r'(\{num\d*\}|(\{num\d*\+\d*\}))') if c.search(newname): tmp = c.search(newname).group() #if it is a directory just set count 0 and pass if os.path.isdir(path) and first == 1: newname = c.sub("",newname) count = 1 #if {num3} elif len(tmp)== 6: substitute = str(count).zfill(int(tmp[4])) newname = c.sub(substitute, newname) count = count + 1 #if {num3+3} elif len(tmp) > 7: substitute = str(count+int(tmp[6:(len(tmp)-1)])).zfill(int(tmp[4])) newname = c.sub(substitute, newname) count = count + 1 else: pass #replace {dir} with the parent dir name dir = os.path.dirname(path) dir = os.path.basename(dir) newname = newname.replace('{dir}', dir) #replace {orig} with the original name newname = newname.replace('{orig}',oldname) #Some Time/Date Replacement newname = newname.replace('{date}', time.strftime("%d%b%Y", time.localtime())) newname = newname.replace('{year}', time.strftime("%Y", time.localtime())) newname = newname.replace('{month}', time.strftime("%m", time.localtime())) newname = newname.replace('{monthname}', time.strftime("%B", time.localtime())) newname = newname.replace('{monthsimp}', time.strftime("%b", time.localtime())) newname = newname.replace('{day}', time.strftime("%d", time.localtime())) newname = newname.replace('{dayname}', time.strftime("%A", time.localtime())) newname = newname.replace('{daysimp}', time.strftime("%a", time.localtime())) else: raise SystemExit return newname def rename(path,oldpath,first): oldname = os.path.split(path)[1] newname = getNewName(oldname,path,first) newpath = os.path.join(os.path.split(path)[0],newname) if first == 1: undolog.write('%s Converted To %s\n' %(oldpath,newpath)) else: undolog.write('%s Converted To %s\n' %(os.path.join(oldpath,oldname),newpath)) os.rename(path,newpath) #print "Replacing %s with %s" %(path,newpath) For Debugging if os.path.isdir(newpath): #if the choice is Patternize, skip the subfolers if choice == "Patternize" and first != 1: pass else: if first != 1: oldpath = os.path.join(oldpath,oldname) for name in os.listdir(newpath): rename(os.path.join(newpath,name),oldpath,0) def undo(): log = open('.Renamer.log','r') for line in log: oldpath, newpath = line.split('\n')[0].split(' Converted To ') os.rename(os.path.join(os.path.dirname(oldpath),os.path.basename(newpath)),oldpath) log.close() raise SystemExit choiceDialog() undolog = open('.Renamer.log','w') for i in sys.argv[1:]: dirs.append(i) for dir in dirs: oldpath = dir rename(dir,oldpath,1) undolog.close()