2010-11-25 6 views
12

J'ai reçu un script que je veux utiliser pour changer une chaîne répétée dans une structure de dossier de projet. Une fois changé, je peux vérifier cela dans SVN. Cependant quand je cours mon manuscrit il va dans les dossiers de .svn que je veux qu'il ingore. Comment puis-je atteindre cet objectif? Code ci-dessous, merci.os.walk exclure les dossiers .svn

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" 

Répondre

29

Essayez ceci:

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

Et puis continuer le traitement.

+1

Existe-t-il également un moyen facile d'exclure tous les fichiers et sous-dossiers cachés (en commençant par ".")? –

+1

J'ai trouvé cette réponse: http://stackoverflow.com/questions/13454164/os-walk-without-hidden-folders –

7

Err... what?

Lorsque topdown est vrai, l'appelant peut modifier la liste des dirnames en place (peut-être en utilisant del ou assignation de tranche), et marcher() ne fera que récursion dans les sous-répertoires dont les noms rester en dirnames; ceci peut être utilisé pour élaguer la recherche, imposer un ordre spécifique de visite, ou même pour informer walk() sur les répertoires que l'appelant crée ou renomme avant de recommencer à marcher().

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

puis-je demander? Je sais que python suit la règle 'demander plus facilement pardon que permisison' mais dans ce cas n'est pas mieux un simple si '.svn': # etc comme dans l'exemple ci-dessus? je trouve cette syntaxe laide; peux-tu me donner un conseil? – Ant

+0

@Ant: C'est comme ça que je roule. –

Questions connexes