🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
2 messages
2 total messages Started by Bypper Wed, 08 Dec 2010 19:44
Programa renombrado masivo en Python
#273
Author: Bypper
Date: Wed, 08 Dec 2010 19:44
110 lines
4833 bytes
Buenas:

Estoy confeccionando un script en Python cuyo objetivo es recorrer el
arbol a partir de una ruta concreta y renombrar todos los ficheros y
directorios en Mayusculas a minusculas y los espacios que puedan tener
los nombres en "_".

El script realiza su cometido correctamente, pero como es l�gico si
encuentra un directorio que cumple alguno de los requisitos y este es
renombrado, pues claro, no puede procesar lo que se encuentra por
debajo, y no finaliza el proceso.

Pongamos una estructura como esta:

prueba1
|-- A
|   |-- b b
|   |   |-- JJJ
|   |   |-- JODER
|   |   `-- c
|   |       `-- mierda en bote
|   |-- ddd
|   |   |-- 1
|   |   |-- 2
|   |   |-- 3
|   |   `-- 4
|   `-- mier
`-- todo

5 directories, 8 files

En el momento en que renombra el directorio "A" a "a", se detiene la
ejecuci�n, al igual que cuando renombra el directorio "b b" a "b_b" pues
no procesa los ficheros que cuelgan de el.

Esto provoca que haya que ejecutar el script una o varias veces,
dependiendo de los que se encuentre.

�Sabeis como poder esquivar esto, y que pueda procesar todo de una sola
vez, o bien, retomar el proceso de alguna manera?

El script es este:
................................................................................
#!/usr/bin/python

# importamos los modulos...
import os, sys, string, logging, time
#########################
#   V A R I A B L E S   #
#########################
RUTAG='/home/alberto/prueba1'
LOG=sys.argv[0] + '.log'
DIAHORA = time.strftime("%y%m%d_%H%M",time.localtime())
#########################
#   F U N C I O N E S   #
#########################
def CHKMAYUS(MAYUS,RUTA):
    """funcion para comprobar si tiene mayusculas y renombrar si fuera
necesario"""
    if MAYUS.isupper():
        MAYUS2=string.lower(MAYUS)
        # renombramos los que esten en mays
        MSGMAYUS='renombramos ' + MAYUS + ' a ' + MAYUS2
        os.rename(RUTA + '/' + MAYUS, RUTA + '/' + MAYUS2)
        print MSGMAYUS
        logging.info(MSGMAYUS)

def CHKESPACIO(ESPA,RUTA):
    """funcion para comprobar si tiene espacios y cambiarlos por '_'"""
    if ESPA.count(' '):
        ESPA2=ESPA.replace(' ','_')
        # renombramos los espacios por '_'
        MSGESPA='renombramos ' + ESPA + ' a ' + ESPA2
        os.rename(RUTA + '/' + ESPA, RUTA + '/' + ESPA2)
        print MSGESPA
        logging.info(MSGESPA)

#########################
#   P R I N C I P A L   #
#########################
logging.basicConfig(filename=LOG,level=logging.DEBUG)
logging.info(DIAHORA)
logging.info("******************************************************************************")
logging.info("* Renombramos directorios/ficheros a minusculas y
cambiando espacios por '_' *")
logging.info("******************************************************************************")
try:
    for base, dirs, files in os.walk(RUTAG):
        print 'Procesando ' + base
        # mostramos lista directorios... SI NO ESTA vacia
        if dirs:
            # repasamos la lista de directorios
            for D in dirs:
                # chequeamos los que esten en mays
                CHKMAYUS(D,base)
                # chequeamos que tengan espacios
                CHKESPACIO(D,base)
        # mostramos lista ficheros... SI NO ESTA vacia
        if files:
            # repasamos la lista de ficheros
            for F in files:
                # chequeamos los que esten en mays
                CHKMAYUS(F,base)
                # chequeamos que tengan espacios
                CHKESPACIO(F,base)
finally:
    print "Proceso finalizado correctamente"
................................................................................

Gracias, un saludo,
Re: Programa renombrado masivo en Python [SOLUCION]
#274
Author: Bypper
Date: Thu, 09 Dec 2010 21:34
9 lines
1281 bytes
Bypper escribi�:

Sustituir la linea:

for base, dirs, files in os.walk(RUTAG):

por:

for base, dirs, files in os.walk(RUTAG, topdown=False):
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads