2009-03-13 19 views
5

Ho una directory piena di file, alcuni con una e commerciale nel loro nome. Vorrei rinominare tutti i file con la e commerciale e sostituire ogni ampersand con un plus (+). Sto lavorando con circa 10k file. Quale sarebbe il miglior metodo per farlo?Rinomina file, Python/Jython

+0

Si tratta di una directory piatta di 10K file, o un albero di directory con le sottodirectory? –

risposta

13
import glob, os 
for filename in glob.glob(os.path.join(yourPath, "*&*")): 
    os.rename(filename, filename.replace('&','+')) 
+1

iglob sarebbe più adatto qui – SilentGhost

+0

Ci siamo presi la libertà di cambiare la concatenazione di stringhe in una chiamata os.path.join(), per chiarezza e portabilità. – unwind

+0

@SilentGhost - buon punto, aggiornato. @unwind - true, suppongo di essere in UNIX-centric. – vartec

2
import os 
directory = '.' 
for file in os.listdir(directory): 
    if '&' in file : 
     os.rename(file, file.replace('&', '+')) 

Sostituire directory con il proprio percorso.

7

Se si dispone di sottodirectory:

import os 
for dirpath, dirs, files in os.walk(your_path): 
    for filename in files: 
     if '&' in filename: 
      os.rename(
       os.path.join(dirpath, filename), 
       os.path.join(dirpath, filename.replace('&', '+')) 
      ) 
+0

Qual è il punto nella comprensione delle liste in questo caso? Un ciclo semplice sarebbe sufficiente. – jfs

+0

Deve esserci un punto? Potrei anche usare un loop qui, ma la sintassi se in seguito sembra un po 'più bella, non credi? –

+0

L'elenco di 10K senza un motivo è il punto. Tale formattazione potrebbe portare a bug, ad esempio, vedere la virgola vicino a '' + ')), '. – jfs

0

utilizzando rename:

$ rename --find '&' --replace '+' *