Как рекурсивно перебирать файловую структуру и переименовывать каталоги в 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:SonstigesgeoserverIM_TopoGISMAPTILEIMAGES_0tiles_2"):
    if f[-5].isalpha():
        os.rename(f,f[:-5]+f[-5].lower() + ".JPG")
        print "Renamed " +  "---to---" + f[:-5]+f[-5].lower() + ".JPG"

1 ответов


проблема в том, что по умолчанию os.прогулка - это нисходящий. При попытке переименовать каталоги во время обхода сверху вниз результаты непредсказуемы.

попробуйте os.walk идти снизу вверх:

for root, subFolders, files in os.walk(rootdir,topdown=False):

редактировать

еще одна проблема у вас-это listFiles() возвращается, Ну, файлы не каталоги.

этот (непроверенный) sub возвращает каталоги снизу вверх:

def listDirs(dir):
    for root, subFolders, files in os.walk(dir, topdown=False):
        for folder in subFolders:
           yield os.path.join(root,folder)
    return