Article View: es.comp.os.linux.programacion
Article #273Programa renombrado masivo en Python
From: Bypper
Date: Wed, 08 Dec 2010 19:44
Date: Wed, 08 Dec 2010 19:44
110 lines
4833 bytes
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-mailShow 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)