[Python-es] ordenar por extension
tny
a.porrua en gmail.com
Sab Ene 8 10:26:35 CET 2011
El vie, 07-01-2011 a las 21:06 -0500, Juanpe :P escribió:
> saludos amigos.
>
> he programado un script que me muestra la carepeta y blos archivos que
> contiene filtrados por solo los que quiero mostrar. y lo hace pero
> mezclado
> por extensiones, necesito que los muestre ordenados por la extension,
> osea
> primero lo .c luego los .cpp y al final .h, en cada carpeta, he
> googleado
> pero no he encontrado nada q me sirva con sort, haber si alguien me da
> unas
> luces =)
>
> este es el codigo
>
> import os
> ruta = "/ruta/carpeta/archivo/codigo"
> for base, dirs, files in os.walk(ruta):
> for file in [f for f in files if f.lower().endswith((".c", ".cpp",
> ".h"))]:
> dir_actual = base.split(ruta)[1]
> if dir != dir_actual:
> dir = dir_actual
> print "\nla carpeta " + dir + " contiene: \n"
> print file
>
>
> gracias de antemano.
>
>
Si sólo van a ser esas 3 extensiones puede hacerlo un poco a mano.
import os
ruta = "/ruta/carpeta/archivo/codigo"
for base, dirs, files in os.walk(ruta):
filesc=[f for f in files if f.lower.endswith('.c')]
filescpp=[f for f in files if f.lower.endswith('.cpp')]
filesh=[f for f in files if f.lower.endswith('.h')]
for file in filesc + filescpp + filesh:
dir_actual = base.split(ruta)[1]
if dir != dir_actual:
dir = dir_actual
print "\nla carpeta " + dir + " contiene: \n"
print file
No es elegante, pero funciona.
utilizando sort puedes hacerlo así
def extension(key):
i=key.rfind('.')
return key[i:]
import os
ruta = "/ruta/carpeta/archivo/codigo"
for base, dirs, files in os.walk(ruta):
files.sort(key = extension)
for file in [f for f in files if f.lower().endswith((".c", ".cpp",
".h"))]:
dir_actual = base.split(ruta)[1]
if dir != dir_actual:
dir = dir_actual
print "\nla carpeta " + dir + " contiene: \n"
print file
No está muy bien hecho, porque tiene un problema con los archivos que no
tienen extensión.
Te toca a ti mejorarlo.
Más información sobre la lista de distribución Python-es