Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中递归树时跳过.hg/.git/.svn目录_Python_Directory_Os.walk - Fatal编程技术网

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

如何在python中递归树时跳过.hg/.git/.svn目录,python,directory,os.walk,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

我有一个我一直在拼凑的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)
        ...

如何排除存储库子树?

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

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)

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

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)

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

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

你看过os.walk文档了吗。确切的解决方案在文档中
dirnames.remove(“.svn”)
刚刚出现在这里,因为我想删除项目中的所有.svn文件,该命令无需脚本即可完成此操作(在hg&git中,项目根目录中只有一个文件夹需要删除)。@S.Lott感谢您指出文档中的位置;不知道为什么我以前错过了。你看过os.walk文档了吗。确切的解决方案在文档中
dirnames.remove(“.svn”)
刚刚出现在这里,因为我想删除项目中的所有.svn文件,该命令无需脚本即可完成此操作(在hg&git中,项目根目录中只有一个文件夹需要删除)。@S.Lott感谢您指出文档中的位置;不知道为什么我以前错过了它,.hg、.git、.svn是文件夹。另请参见上面的注释,..hg、.git、.svn是文件夹。另请参见上述评论。