2011-10-25 4 views
5

Ho una directory di musica che ha cartelle di album e singoli brani su ogni livello. Come posso attraversare tutti questi file che sono anche codificati in diversi formati (mp3, wav, ecc.)? Inoltre, c'è un modo per rinominarli in un formato più coerente a mio piacimento utilizzando le espressioni regolari?Come eseguire il loop dei file e rinominarli in Python

Grazie

+0

Generalmente addebito denaro per codificare qualcosa di simile. Ecco qualcosa di simile che ho scritto in perl, puoi almeno vedere l'idea approssimativa: https://github.com/eberle1080/oggsync –

+0

@Chris: ahi, 300 linee di Perl per attraversare e rinominare i file? –

+0

No, 300 righe da transcodificare da un formato all'altro. Non è questo ciò che l'OP cercava? –

risposta

7
  • os.walk di andare oltre i file nella directory e le sue sottodirectory, ricorsivamente
  • os.rename rinominarli

La codifica dei file di paga alcun ruolo qui, pensare. Ovviamente puoi rilevare la loro estensione (usa os.path.splitext per quello) e fare qualcosa basato su di essa, ma finché hai solo bisogno di rinominare i file (cioè manipolare i loro nomi), il contenuto non ha importanza.

1

Io uso questo pezzo di codice in un programma che ho scritto. Lo uso per ottenere un elenco ricorsivo di file immagine, il modello di chiamata è qualcosa come re.compile(r'\.(bmp|jpg|png)$', re.IGNORECASE). Penso che tu abbia l'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) 

Dopo aver elencato, sarebbe facile applicare una regola di ridenominazione. os.rename è un tuo amico, vedi http://docs.python.org/library/os.html.