如何在Python中递归遍历时跳过.hg/.git/.svn目录

1 投票
2 回答
1148 浏览
提问于 2025-04-16 16:41

我有一个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

在处理文件之前,你可以先检查一下文件名的第一个字符是不是一个“.”。如果是的话,就跳过这个文件,继续处理下一个文件。

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)
6

正如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)

撰写回答