2010-11-25 64 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