Aviso: Desde entonces he mejorado en varios aspectos, tanto en inglés como en programación, así que perdónenme por la mala sintaxis y como dice ahí con mi inglés de la época, era para uso personal, pero lo tengo tirado sin uso.
Para quien quiera mejorarlo, reprogramarlo...etc, que me deje en los créditos , ojala le sirva a alguien tanto como para aprender como para alguna otra cosa. Saludos y gracias.
Código
#!/usr/bin/env python # -*- coding: utf-8 -*- #file renamer 1.0 #file renamer is script for rename files easy, this vactions proyect continuous #its development, so that it can be some strange, above all it is written in #spanish and for english speaking can be difficult of understand, this is #beacause the vacation proyect was thought for creator's private use. #modulos import os from sys import exit from time import sleep #bugs conocidos: #despues de usar r -s si se usa r -s -i f - palabra da error como si los #tuvieran el mismo nombre, verificar y arreglar! #implementar #creador de vinculo web de publicidad y tal vez una llave tipo key codificada #para autor #constantes VERSION = "1.0" #funciones def limpiar(): """Limpia consola""" if os.name == "nt": os.system("cls") else: os.system("clear") def cifras(x=0): """cifras(x=0) retorna la cantidad de digitos que tiene una cifra positiva""" i = 0 if x == 0: i = 1 elif x < 0: i = -1 else: while x > 0: x = x / 10 i = i + 1 return i #clases class ListaArchivos(): """ListaArchivos(directorio) Operaciones con archivos""" def __init__(self): self._listaArchivos = [] #temporal def __cargar(self, directorio): """cargar(self, directorio) Carga el directorio, filtra los archivos y prepara tareas para renombrado""" #listado de directorios, archivos y #filtrado de carpetas en la lista de archivos, nombre y extension por #separado self._listaArchivos = [os.path.splitext(archivo) for archivo in os.listdir(directorio) if os.path.isfile(archivo)] return "\n<!> %d archivos cargados" % len(self._listaArchivos) def renombrar(self, directorio, opcion="-s"): retorno = [self.__cargar(directorio)] #nombre con el que se renombrara a los archivos nuevoNombre = [] #procesado para cada archivo en la lista for i, archivo in enumerate(self._listaArchivos, 1): #secuencial if "-s" in opcion: nuevoNombre.append(str(i)) if "-i" in opcion: #if separados ahorran espacio y permiten que al usuario poner #nombre al inicio y al lo que un if-else o if-elif no dejaria if 'i' in opcion: #nombre al inicio nuevoNombre.insert(0, opcion[opcion.index("i") + 1]) if 'f' in opcion: #nombre al final nuevoNombre.append(opcion[opcion.index("f") + 1]) #agregando extension de archivo nuevoNombre.append(archivo[1]) #renombrando try: os.rename(''.join(archivo), ''.join(nuevoNombre)) except os.error: print "<!> Error al renombrar archivo %d" % i #mensaje print "<%d> %s --> %s" % (i, (''.join(archivo)), (''.join(nuevoNombre))) #reinicialización de variable nuevoNombre = [] sleep(0.1) retorno.append("\n<!> %d archivos renombrados" % len(self._listaArchivos)) return retorno class FileRenamer(): """Clase principal file renamer""" def __init__(self): self._listaArchivos = ListaArchivos() def creditos(self): """Imprime creditos del autor: Mini_Nauta""" print ''' |||| |||| || |||| || || |||| || ||| || || |||||||| ||| || || || || || || || || || || || || || || || || || || || || || || || || || || || || ||||||| || || || ||||||| || || || || |||| || || |||| || || |||||| || || || \xb8 Mini_Nauta 2012 File Renamer %s http://protohey.blogspot.com\n\n''' % VERSION def ayuda(self, ayudaRapida=False): """Muestra la ayua del programa""" if not ayudaRapida: print ''' c cd Cambia el directorio si es valido. cd <directory> h help Muestra informacion de ayuda. r rename Renombra archivos. Vease help para mas info. q quit Cierra el programa.\n''' else: print ''' | Comando | Ayuda ------------------------------------------------------------------ | c cd | Cambia el directorio si es valido. cd <directory> | | cd.. cambia al directorio anterior. |r rename | Renombra archivos. Por defecto -s | | -s secuencialmente. | | antiguo. | | -i i <palabra inicio> f <palabra final> (xxxxxxxx01...) | | | h help | Muestra informacion de ayuda. | q quit | Cierra el programa. | exit | Nota: si intenta renombrar con el mismo nombre los archivos, por ejemplo aplicando r -s 2 veces recibirá un error para el archivo o cola de ellos.\n''' def cambiarDirectorio(self, nuevoDirectorio=''): """cambiar_directorio(nuevoDirectorio) Cambia de directorio""" #valor de retorno retorno = None #quitando "cd ", se supone en todos los casos opcion == cd, cd.., cd .. #por lo que no tienen directorio #probando por "cd.." if nuevoDirectorio == "cd..": nuevoDirectorio = nuevoDirectorio[2:] #probando con "cd " sin directorio elif nuevoDirectorio == 'cd ': nuevoDirectorio = nuevoDirectorio[2:] #probando cuando es "cd .." elif nuevoDirectorio == "cd ..": nuevoDirectorio = nuevoDirectorio[3:] #exepción, este viene con directorio else: nuevoDirectorio = nuevoDirectorio[3:] #por si se arrastra una carpeta se le quita las " o las ' if len(nuevoDirectorio) != 0 or 1: nuevoDirectorio = ''.join([char for char in nuevoDirectorio if char != '"' and char != "'"]) #cambiando de directorio try: os.chdir(nuevoDirectorio) except os.error: retorno = "\n<!> Directorio no valido" return retorno def opciones(self, nota=None): """opciones(error=None) Opciones del programa nota(string): Define una nota de aviso para el usuario""" #verificacion de nota if nota != None: if type(nota) == list: for frase in nota: print frase else: print nota opcion = (raw_input("\n<->> ")).encode("utf-8") if len(opcion) == 0: nota = "\n<!> No se han ingresado comandos" #recordar agregar los ayudas para comandos elif opcion == "h" or opcion == "help": limpiar() self.ayuda(True) raw_input() elif opcion[0] == 'r' or opcion[:5] =="rename": if opcion == "rename": nota = self._listaArchivos.renombrar(os.getcwd(), ((opcion[6:]).split(' '))[1:]) else: nota = self._listaArchivos.renombrar(os.getcwd(), ((opcion[1:]).split(' '))[1:]) elif opcion == "cd.." or opcion[0] == 'c' or opcion[:1] == "cd": nota = self.cambiarDirectorio(opcion) elif opcion == 'q' or opcion == "quit" or opcion == "exit": limpiar() print "\n\n\n\n" self.creditos() sleep(2) exit() else: nota = "\n<!> Comando invalido" limpiar() #este es la nota retornada por cambiarDirectorio self.iniciar(nota) def iniciar(self, nota=None): """iniciar(nota=None) Inicio de file renamer, similar a main loop en otras aplicaciones nota: parametro que sirve de puente entre opciones y cambiarDirectorio pero que es necesario que pase por iniciar.""" self.creditos() self.ayuda() print "<-> Directorio actual: \"" + os.getcwd() + '\"' #la nota se le pasa a opciones para que lo muestre #si es que contiene alguna notificacion para el usuario self.opciones(nota) #main def main(): fr = FileRenamer() fr.iniciar() if __name__ == '__main__': main()