2010-11-25 21 views
12

Recibí un script que quiero usar para cambiar una cadena repetida a lo largo de una estructura de carpeta de proyecto. Una vez cambiado, puedo verificar esto en SVN. Sin embargo, cuando ejecuto mi script, va a las carpetas .svn que deseo que administre. ¿Cómo puedo conseguir esto? Codifique a continuación, gracias.os.walk excluir .svn carpetas

import os 
import sys 

replacement = "newString" 
toReplace = "oldString" 
rootdir = "pathToProject" 


for root, subFolders, files in os.walk(rootdir): 
    print subFolders 
    if not ".svn" in subFolders: 
    for file in files: 
     fileParts = file.split('.') 
     if len(fileParts) > 1: 
     if not fileParts[len(fileParts)-1] in ["dll", "suo"]: 
      fpath = os.path.join(root, file) 
      with open(fpath) as f: 
      s = f.read() 
      s = s.replace(toReplace, replacement) 
      with open(fpath, "w") as f: 
      f.write(s) 

print "DONE" 

Respuesta

29

Prueba esto:

for root, subFolders, files in os.walk(rootdir): 
    if '.svn' in subFolders: 
     subFolders.remove('.svn') 

Y luego continuar con el procesamiento.

+1

¿Existe también una manera fácil de excluir todos los archivos ocultos y subcarpetas (comenzando con ".")? –

+1

He encontrado esta respuesta: http://stackoverflow.com/questions/13454164/os-walk-without-hidden-folders –

7

Err... what?

Cuando arriba hacia abajo es cierto que la persona que llama puede modificar la lista dirnames en el lugar (tal vez usando del o cesión rebanada), y caminar() sólo Recursividad en los subdirectorios cuyos nombres permanecer en dirnames; esto se puede utilizar para podar la búsqueda, imponer un orden específico de visita, o incluso para informar a walk() sobre los directorios que la persona que llama crea o cambia el nombre antes de reanudar walk() nuevamente.

for root, subFolders, files in os.walk(rootdir): 
    try: 
    subFolders.remove('.svn') 
    except ValueError: 
    pass 
    dosomestuff() 
+1

¿puedo preguntar? Sé que Python sigue la regla 'más fácil pedir perdón que permisison', pero en este caso no es mejor un simple si '.svn': # etc como en el ejemplo anterior? encuentro esa sintaxis fea; ¿puedes darme un consejo? – Ant

+0

@Ant: Así es como me rueda. –

Cuestiones relacionadas