elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python 2.7.3] Renamer 1.0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python 2.7.3] Renamer 1.0  (Leído 1,556 veces)
flacc


Desconectado Desconectado

Mensajes: 854



Ver Perfil WWW
[Python 2.7.3] Renamer 1.0
« en: 24 Marzo 2014, 06:00 am »

Hola, quiero compartir un script que hice hace algún tiempo la verdad, se puede mejorar, reprogramar y documentar mejor claro está, lo hice para trabajar con conjuntos de archivos a mi medida, me refiero a cantidades de mas de 3000 archivos en los que me tenía que manejar.

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  :xD, ojala le sirva a alguien tanto como para aprender como para alguna otra cosa. Saludos y gracias.

Código
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. #file renamer 1.0
  5. #file renamer is script for rename files easy, this vactions proyect continuous
  6. #its development, so that it can be some strange, above all it is written in
  7. #spanish and for english speaking can be difficult of understand, this is
  8. #beacause the vacation proyect was thought for creator's private use.
  9.  
  10. #modulos
  11. import os
  12. from sys import exit
  13. from time import sleep
  14.  
  15. #bugs conocidos:
  16. #despues de usar r -s si se usa r -s -i f - palabra da error como si los
  17. #tuvieran el mismo nombre, verificar y arreglar!
  18.  
  19. #implementar
  20. #creador de vinculo web de publicidad y tal vez una llave tipo key codificada
  21. #para autor
  22.  
  23. #constantes
  24. VERSION = "1.0"
  25. #funciones
  26. def limpiar():
  27.        """Limpia consola"""
  28.        if os.name == "nt":
  29.            os.system("cls")
  30.        else:
  31.            os.system("clear")
  32.  
  33. def cifras(x=0):
  34.    """cifras(x=0)
  35.       retorna la cantidad de digitos que tiene una cifra positiva"""
  36.    i = 0
  37.  
  38.    if x == 0:
  39.        i = 1
  40.    elif x < 0:
  41.        i = -1
  42.    else:
  43.        while x > 0:
  44.            x = x / 10
  45.            i = i + 1
  46.  
  47.    return i
  48.  
  49. #clases
  50. class ListaArchivos():
  51.    """ListaArchivos(directorio)
  52.    Operaciones con archivos"""
  53.    def __init__(self):
  54.        self._listaArchivos = [] #temporal
  55.  
  56.    def __cargar(self, directorio):
  57.        """cargar(self, directorio)
  58.        Carga el directorio, filtra los archivos
  59.        y prepara tareas para renombrado"""
  60.  
  61.        #listado de directorios, archivos y
  62.        #filtrado de carpetas en la lista de archivos, nombre y extension por
  63.        #separado
  64.        self._listaArchivos = [os.path.splitext(archivo) for archivo in
  65.        os.listdir(directorio) if os.path.isfile(archivo)]
  66.  
  67.        return "\n<!> %d archivos cargados" % len(self._listaArchivos)
  68.  
  69.    def renombrar(self, directorio, opcion="-s"):
  70.        retorno =  [self.__cargar(directorio)]
  71.  
  72.        #nombre con el que se renombrara a los archivos
  73.        nuevoNombre = []
  74.  
  75.        #procesado para cada archivo en la lista
  76.        for i, archivo in enumerate(self._listaArchivos, 1):
  77.            #secuencial
  78.            if "-s" in opcion:
  79.                nuevoNombre.append(str(i))
  80.  
  81.            if "-i" in opcion:
  82.                #if separados ahorran espacio y permiten que al usuario poner
  83.                #nombre al inicio y al lo que un if-else o if-elif no dejaria
  84.                if 'i' in opcion:
  85.                    #nombre al inicio
  86.                    nuevoNombre.insert(0, opcion[opcion.index("i") + 1])
  87.                if 'f' in opcion:
  88.                    #nombre al final
  89.                    nuevoNombre.append(opcion[opcion.index("f") + 1])
  90.  
  91.            #agregando extension de archivo
  92.            nuevoNombre.append(archivo[1])
  93.            #renombrando
  94.            try:
  95.                os.rename(''.join(archivo), ''.join(nuevoNombre))
  96.            except os.error:
  97.                print "<!> Error al renombrar archivo %d" % i
  98.            #mensaje
  99.            print "<%d> %s --> %s" % (i, (''.join(archivo)), (''.join(nuevoNombre)))
  100.            #reinicialización de variable
  101.            nuevoNombre = []
  102.            sleep(0.1)
  103.  
  104.        retorno.append("\n<!> %d archivos renombrados" % len(self._listaArchivos))
  105.        return retorno
  106.  
  107.  
  108. class FileRenamer():
  109.    """Clase principal file renamer"""
  110.    def __init__(self):
  111.        self._listaArchivos = ListaArchivos()
  112.  
  113.    def creditos(self):
  114.        """Imprime creditos del autor: Mini_Nauta"""
  115.        print '''
  116.   ||||  |||| || ||||   || ||   ||||   ||    |||    ||  || ||||||||   |||
  117.   ||  ||  || || || ||  || ||   || ||  ||   || ||   ||  ||    ||     || ||
  118.   ||      || || ||  || || ||   ||  || ||  |||||||  ||  ||    ||    |||||||
  119.   ||      || || ||   |||| ||   ||   |||| ||     || ||||||    ||   ||     ||
  120.  
  121.                               \xb8 Mini_Nauta 2012
  122.                                   File Renamer %s
  123.                           http://protohey.blogspot.com\n\n''' % VERSION
  124.  
  125.    def ayuda(self, ayudaRapida=False):
  126.        """Muestra la ayua del programa"""
  127.        if not ayudaRapida:
  128.            print '''
  129.    c cd     Cambia el directorio si es valido. cd <directory>
  130.    h help   Muestra informacion de ayuda.
  131.    r rename Renombra archivos. Vease help para mas info.
  132.    q quit   Cierra el programa.\n'''
  133.        else:
  134.            print '''
  135.    | Comando | Ayuda
  136.    ------------------------------------------------------------------
  137.    | c cd    | Cambia el directorio si es valido. cd <directory>
  138.    |         |  cd.. cambia al directorio anterior.
  139.    |r rename | Renombra archivos. Por defecto -s
  140.    |         |  -s secuencialmente.
  141.    |         |   antiguo.
  142.    |         |  -i i <palabra inicio> f <palabra final> (xxxxxxxx01...)
  143.    |         |
  144.    | h help  | Muestra informacion de ayuda.
  145.    | q quit  | Cierra el programa.
  146.    |   exit  |
  147.  
  148.    Nota: si intenta renombrar con el mismo nombre los archivos, por ejemplo
  149.    aplicando r -s 2 veces recibirá un error para el archivo o cola de ellos.\n'''
  150.  
  151.    def cambiarDirectorio(self, nuevoDirectorio=''):
  152.        """cambiar_directorio(nuevoDirectorio)
  153.        Cambia de directorio"""
  154.  
  155.        #valor de retorno
  156.        retorno = None
  157.  
  158.        #quitando "cd ", se supone en todos los casos opcion == cd, cd.., cd ..
  159.        #por lo que no tienen directorio
  160.        #probando por "cd.."
  161.        if nuevoDirectorio == "cd..":
  162.            nuevoDirectorio = nuevoDirectorio[2:]
  163.        #probando con "cd " sin directorio
  164.        elif nuevoDirectorio == 'cd ':
  165.            nuevoDirectorio = nuevoDirectorio[2:]
  166.        #probando cuando es "cd .."
  167.        elif nuevoDirectorio == "cd ..":
  168.            nuevoDirectorio = nuevoDirectorio[3:]
  169.        #exepción, este viene con directorio
  170.        else:
  171.            nuevoDirectorio = nuevoDirectorio[3:]
  172.  
  173.        #por si se arrastra una carpeta se le quita las " o las '
  174.        if len(nuevoDirectorio) != 0 or 1:
  175.            nuevoDirectorio = ''.join([char for char in nuevoDirectorio
  176.            if char != '"' and char != "'"])
  177.  
  178.        #cambiando de directorio
  179.        try:
  180.            os.chdir(nuevoDirectorio)
  181.        except os.error:
  182.            retorno = "\n<!> Directorio no valido"
  183.  
  184.        return retorno
  185.  
  186.    def opciones(self, nota=None):
  187.        """opciones(error=None)
  188.        Opciones del programa
  189.  
  190.        nota(string): Define una nota de aviso para el usuario"""
  191.        #verificacion de nota
  192.        if nota != None:
  193.            if type(nota) == list:
  194.                for frase in nota:
  195.                    print frase
  196.            else:
  197.                print nota
  198.  
  199.        opcion = (raw_input("\n<->> ")).encode("utf-8")
  200.  
  201.        if len(opcion) == 0:
  202.            nota = "\n<!> No se han ingresado comandos"
  203.        #recordar agregar los ayudas para comandos
  204.        elif opcion == "h" or opcion == "help":
  205.            limpiar()
  206.            self.ayuda(True)
  207.            raw_input()
  208.  
  209.        elif opcion[0] == 'r' or opcion[:5] =="rename":
  210.            if opcion == "rename":
  211.                nota = self._listaArchivos.renombrar(os.getcwd(),
  212.            ((opcion[6:]).split(' '))[1:])
  213.            else:
  214.                nota = self._listaArchivos.renombrar(os.getcwd(),
  215.            ((opcion[1:]).split(' '))[1:])
  216.  
  217.        elif opcion == "cd.." or opcion[0] == 'c' or opcion[:1] == "cd":
  218.            nota = self.cambiarDirectorio(opcion)
  219.  
  220.        elif opcion == 'q' or opcion == "quit" or opcion == "exit":
  221.            limpiar()
  222.            print "\n\n\n\n"
  223.            self.creditos()
  224.            sleep(2)
  225.            exit()
  226.  
  227.        else:
  228.            nota = "\n<!> Comando invalido"
  229.  
  230.        limpiar()
  231.        #este es la nota retornada por cambiarDirectorio
  232.        self.iniciar(nota)
  233.  
  234.    def iniciar(self, nota=None):
  235.        """iniciar(nota=None)
  236.        Inicio de file renamer, similar a main loop
  237.        en otras aplicaciones
  238.  
  239.        nota: parametro que sirve de puente entre opciones y cambiarDirectorio
  240.        pero que es necesario que pase por iniciar."""
  241.        self.creditos()
  242.        self.ayuda()
  243.        print "<-> Directorio actual: \"" + os.getcwd() + '\"'
  244.        #la nota se le pasa a opciones para que lo muestre
  245.        #si es que contiene alguna notificacion para el usuario
  246.        self.opciones(nota)
  247. #main
  248. def main():
  249.    fr = FileRenamer()
  250.    fr.iniciar()
  251.  
  252. if __name__ == '__main__':
  253.    main()


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(Python)Existen ventanas de entrada y salida de datos en python « 1 2 »
Scripting
tonilogar 11 15,595 Último mensaje 29 Noviembre 2009, 00:49 am
por tonilogar
Advanced Renamer 3.02: El renombrado masivo de archivos nunca fue tan fácil
Noticias
wolfbcn 0 1,616 Último mensaje 5 Abril 2011, 02:17 am
por wolfbcn
[Python] ¿Por qué Python 2.7.3 admite la sintaxis de Python 3? « 1 2 »
Scripting
Yidu 10 10,593 Último mensaje 10 Febrero 2013, 21:46 pm
por Eleкtro
[Python 2.7.3] ¿Cómo instalar un entorno visual para Python?
Scripting
Yidu 6 8,282 Último mensaje 25 Febrero 2013, 04:21 am
por The_Mushrr00m
[Python/Tkinter](Kyurem v2.0)Consola de comandos hecha en python
Scripting
AdeLax 0 4,280 Último mensaje 9 Agosto 2013, 22:45 pm
por AdeLax
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines