Массовое переименование · Шаг 3 из 4
В каком порядке
План проверен, но выполнять его по порядку нельзя. 1.jpg → 2.jpg первым же шагом затрёт настоящий 2.jpg, который сам должен стать 3.jpg. А если нумеровать задом наперёд, получится круг: 1 → 3, 3 → 1 — и как ни начни, первый шаг что-нибудь затрёт.
Что сделать
Расставьте переименования так, чтобы ни одно не затёрло файл, который ещё ждёт своей очереди; круги разорвите временным именем.
Что приходит
plan— проверенный шагом 2 план: пары(старое, новое), новые имена все разные, и каждое либо свободно, либо это старое имя другой пары
Что вернуть
Список шагов (откуда, куда) для выполнения по одному, сверху вниз, — с временными именами там, где был круг.
Допишите функцию poryadok в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Программа выполняет шаги ровно в этом порядке и каждый записывает в журнал — до того, как переименовать. Журнал нужен шагу 4 для отмены.
Обмен именами a.txt ⇄ b.txt кругом: оба имени заняты. Первый по плану, a.txt, уходит во временное a.txt.~1, потом b.txt становится a.txt, а временный — b.txt. Три шага: ("a.txt", "a.txt.~1"), ("b.txt", "a.txt"), ("a.txt.~1", "b.txt").
poryadok([("a.txt", "b.txt"), ("b.txt", "a.txt")])
[('a.txt', 'a.txt.~1'), ('b.txt', 'a.txt'), ('a.txt.~1', 'b.txt')]
Имена сравниваются без учёта больших и маленьких букв (lower()), как в шаге 2. Порядок задан точно — проверка сверяет шаги, а не только итог:
- Пока в плане что-то осталось: найти первую по плану пару, чьё новое имя сейчас никем не занято, — то есть не совпадает со старым именем ни одной оставшейся пары (и своей тоже). Выполнить её: добавить в шаги, убрать из плана. И снова искать с начала оставшегося плана.
- Если свободных нет — всё оставшееся стоит в кругах. Взять первую оставшуюся пару
(старое, новое): добавить шаг(старое, временное), а саму пару на её же месте в плане заменить на(временное, новое). Дальше — снова пункт 1. - Временное имя —
старое + ".~1"; если такое имя (без учёта регистра) уже встречается в плане — старым, новым или уже выданным временным, —.~2,.~3и так далее.
Смена одного регистра (a.JPG → a.jpg) по этим правилам идёт через временное имя: новое имя совпадает со своим же старым. Так и надо — на Windows и macOS переименовать файл в себя же с другим регистром напрямую получается не всегда.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.