9. Переименование файлов по шаблону №2.

(открыть в новой вкладке)

Условие:

Нужно переименовать файлы в текущем каталоге и во всех вложенных по шаблону. Т.е. найдём все файлы с расширением jpg вида: 1.jpg ... Переместим их в каталог уровнем выше, а дальше в каталог "Finish". Все файлы должны иметь названия вида: 1.jpg, 2.jpg ... n.jpg (нумерация должна быть без повторов и разрывов).
Другие файлы должны остаться без изменений и нетронутыми.

Пример:

До обработки:



После обработки:



Код:

import os, pathlib, re, shutil


out_way = pathlib.Path.cwd()                                                                              # объект-путь, текущее расположение в ФС
in_way = pathlib.Path.cwd() / ".."                                                                        # объект-путь, место назначения в ФС
regex_obj = re.compile(r"\d{1,5}\.jpg")	                                                                  # пример шаблона: 1.jpg

os.makedirs("../Finish")                                                                                  # создадим каталог Finish уровнем выше, в него будем перемещать файлы

"""цикл с функцией os.walk(), который обходит все каталоги и файлы и даже вложенные;
ПЕРМЕЩАЕМ ФАЙЛЫ"""
first = 1                                                                                                 # будет меняться значение "first" с каждым каталогом "temp"
temp = []
for foldername, subfoldeers, filenames in os.walk(out_way):
    first += len(temp)
    temp = []                                                                                               
    for i in filenames:                                                                                   # для каждого каталога корневого и вложенного свой список файлов, обойдем его в цикле
        b = regex_obj.search(i)                                                                           # сравним файл в списке с выражением REGEX (ищем файла по шаблону)
        if type(b) == re.Match:                                                                           # обрабатываем только подходящие файлы
            temp.append(i)                                                                                # добавляем во временный список подходящие файлы
    amount_files = range(first, first + len(temp))
    for a, b in zip(temp, amount_files):
        original = foldername + "/" + a                                                                   # в переменной хранится полный путь к файлу который нужно переименовать
        clone = in_way / "Finish" / (str(b) + ".jpg")                                                     # в переменной хранится полный путь к файлу который должен получиться
        original = pathlib.Path(original)
        shutil.move(original, clone)