🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #273

Programa renombrado masivo en Python

#273
From: 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,
Technical Details
Message-ID: <hp35t7-qod.ln1@apevia.bersol.info>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!feeder.news-service.com!tudelft.nl!txtfeed1.tudelft.nl!news.buerger.net!news.antakira.com!cagarruta.escomposlinux.org!tramontana.escomposlinux.org!escomposlinux.org!apevia.bersol.info!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Thread: f86c8,cad77acf2e4f540a,start
X-Google-NewGroupId: yes
X-Google-Attributes: gid646d03421f,domainid0,public,usenet
X-Google-Language: SPANISH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!feeder.news-service.com!tudelft.nl!txtfeed1.tudelft.nl!news.buerger.net!news.antakira.com!cagarruta.escomposlinux.org!tramontana.escomposlinux.org!escomposlinux.org!apevia.bersol.info!not-for-mail
From: Bypper <bypper@microsoft.com>
Newsgroups: es.comp.os.linux.programacion
Subject: Programa renombrado masivo en Python
Date: Wed, 08 Dec 2010 20:44:17 +0100
Organization: Ecolnet
Lines: 110
Message-ID: <hp35t7-qod.ln1@apevia.bersol.info>
NNTP-Posting-Host: 87.235.69.75
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: tramontana.escomposlinux.org 1291837487 7870 87.235.69.75 (8 Dec 2010 19:44:47 GMT)
X-Complaints-To: newsmaster@tramontana.escomposlinux.org
NNTP-Posting-Date: Wed, 8 Dec 2010 19:44:47 +0000 (UTC)
User-Agent: Mozilla-Thunderbird 2.0.0.24 (X11/20100328)