如何在Python中递归遍历文件结构并重命名目录
我想要递归地重命名文件夹,把最后一个字符改成小写字母(如果它是字母的话)。
我之前的帖子帮了我不少忙(抱歉重复发帖,也没有感谢大家的回答)。
这段代码对文件有效,但我该怎么调整它才能也适用于文件夹呢?
import fnmatch
import os
def listFiles(dir):
rootdir = dir
for root, subFolders, files in os.walk(rootdir):
for file in files:
yield os.path.join(root,file)
return
for f in listFiles(r"N:\Sonstiges\geoserver\IM_Topo\GIS\MAPTILEIMAGES_0\tiles_2"):
if f[-5].isalpha():
os.rename(f,f[:-5]+f[-5].lower() + ".JPG")
print "Renamed " + "---to---" + f[:-5]+f[-5].lower() + ".JPG"
1 个回答
7
问题在于,os.walk 默认是从上到下遍历的。如果你在从上到下的过程中尝试重命名目录,结果可能会很不稳定,无法预测。
你可以尝试把 os.walk
设置为从下到上遍历:
for root, subFolders, files in os.walk(rootdir,topdown=False):
编辑
你还有另一个问题,就是 listFiles()
返回的是文件,而不是目录。
这个(未经测试的)子程序可以从下到上返回目录:
def listDirs(dir):
for root, subFolders, files in os.walk(dir, topdown=False):
for folder in subFolders:
yield os.path.join(root,folder)
return