2009-03-13 22 views
5

Tengo un directorio lleno de archivos, algunos de los cuales tienen un ampersand en sus nombres. Me gustaría cambiar el nombre de todos los archivos con ampersands y reemplazar cada ampersand con un signo más (+). Estoy trabajando con alrededor de 10k archivos. ¿Cuál sería el mejor método para hacer esto?Renombrar archivos, Python/Jython

+0

¿Es un directorio plano de 10K archivos, o un árbol de directorio con subdirectorios? –

Respuesta

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

iglob sería más adecuado aquí – SilentGhost

+0

Se tomó la libertad de cambiar la concatenación de cadenas en una llamada a os.path.join(), para mayor claridad y portabilidad. – unwind

+0

@SilentGhost - buen punto, actualizado. @unwind - cierto, supongo que estoy centrado en UNIX. – vartec

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

Reemplazar directory con su propio camino.

7

Si tiene subdirectorios:

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

¿Cuál es el punto en la lista de comprensión en este caso? Un bucle simple sería suficiente. – jfs

+0

¿Tiene que haber un punto? También podría usar un bucle aquí, pero la sintaxis posterior parece un poco más agradable, ¿no crees? –

+0

10K lista sin una razón es el punto. Tal formateo podría generar errores, p. Ej., Ver la coma cerca de '' + ')), '. – jfs

0

utilizando rename:

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