如何在python中递归树时跳过.hg / .git / .svn目录

时间:2011-04-29 22:15:57

标签: python directory os.walk

我有一个python脚本,我一直在拼凑(我的第一个python尝试之一)。

该脚本会递归查找XCode项目文件的文件夹;该脚本工作正常,但我想调整它以跳过任何.svn(或.hg或.git)文件夹,以便它不会尝试修改源存储库。

以下是递归搜索的脚本

for root, dirnames, files in os.walk('.'):
    files = [f for f in files if re.search("project\.pbxproj", f)]
    for f in files:
        filename = os.path.join(root, f)
        print "Adjusting BaseSDK for %s" % (filename)
        ...

如何排除存储库子树?

2 个答案:

答案 0 :(得分:5)

正如S.Lott在评论中所说,os.walk的文档中提到了这一点。以下应该可以正常工作:

for root, dirs, files in os.walk("."):
    if ".hg" in dirs:
        dirs.remove(".hg")
    for f in files:
        print os.path.join(root, f)

答案 1 :(得分:0)

在处理文件之前,您可以检查文件名中的第一个字符是否以“。”开头,如果是,则继续循环中的下一个项目。

for root, dirnames, files in os.walk('.'):
    files = [f for f in files if re.search("project\.pbxproj", f)]
    for f in files:
        ### EDIT START
        if f[0] == ".":
            continue
        ### EDIT FINISH

        filename = os.path.join(root, f)
        print "Adjusting BaseSDK for %s" % (filename)