2011-10-25 13 views
5

Tengo un directorio de música que tiene carpetas de álbumes y canciones individuales en cada nivel. ¿Cómo puedo recorrer todos estos archivos que también están codificados en diferentes formatos (mp3, wav, etc.)? Además, ¿hay alguna manera de cambiarles el nombre a un formato que sea más consistente a mi gusto usando expresiones regulares?Cómo recorrer archivos y cambiarles el nombre en Python

Gracias

+0

Normalmente cobro dinero para codificar algo así. Aquí hay algo similar que escribí en Perl, al menos puede ver la idea aproximada: https://github.com/eberle1080/oggsync –

+0

@Chris: ouch, 300 líneas de Perl para recorrer y cambiar el nombre de los archivos? –

+0

No, 300 líneas para transcodificar de un formato a otro. ¿No es esto lo que buscaba el OP? –

Respuesta

7
  • os.walk para revisar los archivos en el directorio y sus subdirectorios, de forma recursiva
  • os.rename a cambiar su nombre

la codificación de los archivos paga ningún papel aquí, pensar. Puede, por supuesto, detectar su extensión (use os.path.splitext para eso) y hacer algo basado en eso, pero siempre y cuando solo necesite cambiar el nombre de los archivos (es decir, manipular sus nombres), el contenido apenas importa.

1

Utilizo este fragmento de código en un programa que escribí. Lo uso para obtener una lista recursiva de archivos de imagen, el patrón de llamada es algo así como re.compile(r'\.(bmp|jpg|png)$', re.IGNORECASE). Creo que entiendes la idea.

def getFiles(dirname, suffixPattern=None): 
     dirname=os.path.normpath(dirname) 

     retDirs, retFiles=[], [] 
     for root, dirs, files in os.walk(dirname): 
       for i in dirs: 
         retDirs.append(os.path.join(root, i)) 
       for i in files: 
         if suffixPattern is None or \ 
          suffixPattern.search(i) is not None: 
           retFiles.append((root, i)) 

     return (retDirs, retFiles) 

Después de que tenga la lista, sería fácil aplicar una regla de cambio de nombre. os.rename es su amigo, vea http://docs.python.org/library/os.html.

Cuestiones relacionadas