如何在Python中递归遍历文件结构并重命名目录

6 投票
1 回答
7983 浏览
提问于 2025-04-17 07:25

我想要递归地重命名文件夹,把最后一个字符改成小写字母(如果它是字母的话)。

我之前的帖子帮了我不少忙(抱歉重复发帖,也没有感谢大家的回答)。

这段代码对文件有效,但我该怎么调整它才能也适用于文件夹呢?

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

撰写回答