Python:删除文件的小脚本问题

2024-10-02 02:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个以前在SVN下的项目,但是现在我要把它移到Mercurial,所以我想清除所有的.SVN文件。在

手工操作有点太大了,所以我决定编写一个python脚本来完成它。但它不起作用。在

def cleandir(dir_path):
    print "Cleaning %s\n" % dir_path
    toDelete = []
    files = os.listdir(dir_path)
    for filedir in files:
        print "considering %s" % filedir
        # continue
        if filedir == '.' or filedir == '..':
            print "skipping %s" % filedir
            continue
        path = dir_path + os.sep + filedir
        if os.path.isdir(path):
            cleandir(path)
        else:
            print "not dir: %s" % path

        if 'svn' in filedir:
            toDelete.append(path)

    print "Files to be deleted:"
    for candidate in toDelete:
        print candidate
    print "Delete all? [y|n]"

    choice = raw_input()

    if choice == 'y':
        for filedir in toDelete:
            if os.path.isdir(filedir):
                os.rmdir(filedir)
            else:
                os.unlink(filedir)

    exit()

if __name__ == "__main__":
    cleandir(dir)

print语句显示它只“考虑”名称以“.”开头的filedir。但是,如果我取消了continue语句的注释,那么所有的filedir都将被“考虑”。为什么会这样?在

或者,是否有其他一些已经存在的工具可以递归地反SVN目录树?在


Tags: pathinforifosdirsvnfiles
3条回答

“continue”显示正在考虑的所有文件夹的原因是因为exit()是在函数末尾被调用的。对exit()的调用将在搜索第一个目录后退出Python。如果将其更改为“return”,则函数将被递归调用。在

还有操作系统列表目录不返回“.”或“..”,因此不需要check或任何continue语句。在

:-)

戴维

至少你不应该重新发明递归目录遍历的轮子,而只使用^{}。在

这并不能回答您的Python问题,但是有一种更简单的方法来完成您想要的操作:svn export将在不包含所有.svn目录的情况下在新的位置编写文件树。在

相关问题 更多 >

    热门问题