2012-08-05 98 views
4

我有一个像下面的代码:如何重命名所有文件夹?

temp = os.walk(sys.argv[1]) 
for root, dirs, files in temp: 
    for i in dirs: 
     dir = os.path.join(root,i) 
     os.rename(dir, dir+"!") 

它的工作原理几乎确定。但是,一旦父文件夹被重命名,它不能重命名子文件夹。我怎样才能避免这种情况?

回答

8

走在树topdown设置为False,而不是:

temp = os.walk(sys.argv[1], topdown=False) 
for root, dirs, files in temp: 
    for i in dirs: 
     dir = os.path.join(root,i) 
     os.rename(dir, dir+"!") 

documentation

如果可选参数自上而下True或没有指定,三联供的目录中生成在其任何子目录的三元组之前(目录是自上而下生成的)。如果自顶向下False,则在其所有子目录的三元组(即自下而上生成的目录)之后生成目录的三元组。

因此,你要首先重命名的子目录,并会看到顶级目录最后,和重命名他们将不再影响子目录是如何发现的。

+0

@LA_我有一个事件的问题:在Python中路径和目录是相同的东西吗?我试着用一个目录名而不是'sys.argv [0]'来代替'temp = os.walk('F:\\ WORK \\ ALGOCODE')''和'dirs'列表是空的。从Martijn的解释来看,我没有问题。 – octoback 2012-08-05 12:49:02