Python:递归函数中的os.walk()

时间:2014-07-10 10:41:21

标签: python

我试图在递归函数中使用os.walk()以递归方式遍历整个目录并重命名文件(只是在给定路径上大写所有文件的名称)。我的(简单)代码在这里:

def recursiveRename(path):
    """ This uses the os.walk function to walk through a directory """
    rename(path)
    for root, sub, files in os.walk(path):
        i = 0
        print (sub)
        while(i < len(sub)):
            print (os.path.join(path, sub[i]))
            recursiveRename(os.path.join(path, sub[i]))
            i+=1

哪个输出:

['one', 'two']
/Users/name/Desktop/test/one
['four', 'three']
/Users/name/Desktop/test/one/four
[]
/Users/name/Desktop/test/one/three
[]
[]
[]
/Users/name/Desktop/test/two
[]
['four', 'three']
/Users/name/Desktop/test/four

这会重命名所有文件,但它尝试的最后一个目录不存在(/ test / two中没有子文件夹)。我可以抓住错误,但我觉得我的逻辑有点不对劲,我宁愿把它搞清楚。

1 个答案:

答案 0 :(得分:3)

os.walk() 已经通过您的目录进行递归,您不需要再次递归

rename(path)移到您的循环中:

for root, sub, files in os.walk(path):
    rename(root)