[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