2010-11-25 19 views
12

プロジェクトフォルダ構造全体で繰り返し文字列を変更するために使用するスクリプトがあります。変更したら、これをSVNにチェックすることができます。しかし、私は私のスクリプトを実行すると、それは私がそれを込めて欲しい.svnフォルダに入ります。どうすればこれを達成できますか?下のコード、ありがとう。os.walk .svnフォルダを除外

トップダウンがTrueの場合、呼び出し側が(おそらくデルやスライスを使った代入で)インプレースにdirnamesリストを変更することができ、および(歩く
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" 

答えて

29

これを試してみてください。

+1

隠しファイルとサブフォルダ(「。」で始まる)をすべて除外する簡単な方法はありますか? –

+1

私はこの答えを見つけました:http://stackoverflow.com/questions/13454164/os-walk-without-hidden-folders –

7

Err... what?

は)唯一の名前のサブディレクトリに再帰します姓に残る。検索をプルーニングしたり、特定の訪問順序を指定したり、walk()を再開する前に呼び出し元が作成または名前を変更したディレクトリについてwalk()に通知することもできます。

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

をして処理を続行します。

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

私に聞くことがありますか?私は、Pythonが 'permisisonよりも容赦しやすい'というルールに従っていることを知っていますが、この場合は '.svn'のように単純ではありません。私はその構文が醜いと思う。アドバイスをいただけますか? – Ant

+0

@Ant:それは私のロールです。 –

関連する問題