在Python中递归重命名目录

邓克

我有一个像这样的目录:

在此处输入图片说明

我在使用此功能时遇到问题:

from os import walk
generic_name = "{project_name}"

def rename_project(src):
    project_name = raw_input("Name your project: ")
    for subdir, dirs, files in walk(src):
        rename(subdir, subdir.replace(generic_name, project_name))

到达第二个文件夹后,即{project_name} Planning整个目录已更改。即已成为:

在此处输入图片说明

因此,似乎for ... in walk(src):停止运行。请注意,循环工作正常;我可以打印每个目录并获取结果:

for subdir, dirs, files in walk(src):
    print subdir

产生...

在此处输入图片说明

以我对Python的有限了解,我认为由于目录已更改,这会导致异常walk(src)并意味着该循环被终止。

如何解决此问题以递归遍历目录并重命名包含的所有目录{project_name}

非常感谢 :)

佩丹顿·斯坦

以太检查迭代方法的walk方法的topdown参数,或使用递归来递归遍历目录树。

编辑:好的,我不知道一个重命名字符串最后一次出现的优雅解决方案,但是您就可以了。;)

import os
generic_name = "{project_name}"

subdirs = []

def rename_project(src):
    project_name = raw_input("Name your project: ")
    for subdir, dirs, files in os.walk(src,topdown=False):
        subdirs.append(subdir)

    for subdir in subdirs:
        newdir =  subdir[::-1].replace(generic_name[::-1], project_name[::-1], 1)[::-1]
        print newdir
        #os.rename(subdir,newdir)

rename_project(".")

我分开收集目录并重命名(或打印^^)它们。但是您可以看到(如果运行它)从最里面的文件夹开始递归重命名(打印)。

我从Mark Byers那里的“ replace-last-occurance-in-string”中偷走了rreplace-如何替换字符串中最后一次出现的表达式?^^

而且更干净,无异常,也许更难调试红利版本:

import os
generic_name = "{project_name}"

def rename_project(src):
    project_name = raw_input("Name your project: ")
    for subdir, dirs, files in os.walk(src,topdown=False):
        newdir =  subdir[::-1].replace(generic_name[::-1], project_name[::-1], 1)[::-1]
        print newdir
        if newdir != '.':
            os.rename(subdir,newdir)

rename_project(".")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章