os.walk 排除 .svn 文件夹

15 投票
2 回答
11930 浏览
提问于 2025-04-16 07:36

我有一个脚本,想用它来在整个项目文件夹中更改一个重复的字符串。修改完成后,我可以把它提交到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 个回答

8

呃...这是啥意思?

当topdown设置为True时,调用者可以直接修改dirnames这个列表(比如使用删除或者切片赋值),这样walk()函数只会进入那些名字仍然在dirnames里的子目录。这可以用来减少搜索的范围,规定访问的顺序,甚至可以告诉walk()关于调用者在继续执行walk()之前创建或重命名的目录。

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

试试这个:

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

然后继续处理后面的内容。

撰写回答