代码之家  ›  专栏  ›  技术社区  ›  Martin

os.walk exclude.svn文件夹

  •  13
  • Martin  · 技术社区  · 14 年前

    我得到了一个脚本,我想用它来更改整个项目文件夹结构中的重复字符串。一旦改变了,我就可以把它签入SVN。不过,当我运行脚本时,它会进入.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"
    
    2 回复  |  直到 14 年前
        1
  •  30
  •   user225312    14 年前

    试试这个:

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

    然后继续处理。

        2
  •  8
  •   Ignacio Vazquez-Abrams    14 年前

    Err... what?

    当topdown为True时,调用者可以就地修改dirnames列表(可能使用del或slice赋值),walk()将只递归到其名称保留在dirnames中的子目录中;这可用于删减搜索,强制特定的访问顺序,甚至在调用方再次恢复walk()之前通知walk()调用方创建或重命名的目录。

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