2010-11-25 74 views
12

我得到了一個腳本,我想用它來改變整個項目文件夾結構中重複的字符串。一旦改變,我可以檢查到SVN。但是,當我運行我的腳本時,它會進入我想讓它進入的.svn文件夾。我怎樣才能做到這一點?代碼如下,謝謝。os.walk exclude .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" 

回答

29

試試這個:

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

然後繼續處理。

7

Err... what?

當自上而下爲True,調用者可以修改dirnames中列表就地(可能使用刪除或切片分配)和步行()將只迭代到其名稱中的子目錄留在dirnames;這可以用來修剪搜索,強制訪問的特定順序,甚至可以在再次恢復walk()之前通知walk()關於調用者創建或重命名的目錄。

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

請問?我知道python遵循的規則是「比formisison更容易請求原諒」,但在這種情況下,如果'.svn'不是更好的簡單:#etc就像上面的例子那樣?我覺得語法醜陋;你能給我一個建議嗎? – Ant 2010-11-25 14:00:57

+0

@Ant:這就是我滾動的方式。 – 2010-11-25 17:10:46