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
Author: 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,
Re: Programa renombrado masivo en Python [SOLUCION]
Author: Bypper
Date: Thu, 09 Dec 2010 21:34
Date: Thu, 09 Dec 2010 21:34
9 lines
1281 bytes
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