我有一个像这样的目录:
我在使用此功能时遇到问题:
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] 删除。
我来说两句