我试图在递归函数中使用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中没有子文件夹)。我可以抓住错误,但我觉得我的逻辑有点不对劲,我宁愿把它搞清楚。
答案 0 :(得分:3)
os.walk()
已经通过您的目录进行递归,您不需要再次递归。
将rename(path)
移到您的循环中:
for root, sub, files in os.walk(path):
rename(root)