Массовое переименование · Шаг 4 из 4
Отменить, как было
Тимур переименовал триста фотографий — и понял, что шаблон был не тот. Программа перед каждым переименованием пишет строку в журнал: откуда и куда. Отмена — тот же журнал задом наперёд. Но за это время в папке могло что-то поменяться, а последняя строка журнала, если выключили свет, могла записаться наполовину.
Что сделать
По журналу переименований составьте шаги отмены — в обратном порядке; шаг, который сейчас не выполнить, пропустите и объясните.
Что приходит
zhurnal— текст журнала: по строке на переименование, старое и новое имя через табуляцию\t; строки с#— заметкиest— имена файлов, которые сейчас лежат в папке
Что вернуть
Словарь {"shagi": [(откуда, куда), …], "propushcheno": [тексты]} — шаги отмены по порядку и что пропущено.
Допишите функцию otmena в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Программа зовёт otmena по ключу --otmena: показывает шаги и пропущенное, а с --vypolnit переименует обратно.
В журнале два переименования: 1.jpg → Отпуск_001.jpg и 2.jpg → Отпуск_002.jpg. Отмена — в обратном порядке: сначала ("Отпуск_002.jpg", "2.jpg"), потом ("Отпуск_001.jpg", "1.jpg"). Оба файла на месте, пропущенного нет.
zhurnal = "# переименование 02.11.2026 17:40\n1.jpg\tОтпуск_001.jpg\n2.jpg\tОтпуск_002.jpg\n" est = ["Отпуск_001.jpg", "Отпуск_002.jpg"]
otmena(zhurnal, est)
{'shagi': [('Отпуск_002.jpg', '2.jpg'), ('Отпуск_001.jpg', '1.jpg')], 'propushcheno': []}
Разбор журнала.
- Строки делятся по
\n. Последний кусок без\nв конце — строка, которую не успели дописать: её нет. Программа пишет строку журнала до переименования, так что недописанная строка значит «этого переименования не было». - Пустые строки и строки, начинающиеся с
#, пропускаются. Строка, где не ровно одна табуляция или одна из половин пуста, — испорчена, пропускается.
Отмена. Записи берутся с последней к первой; отмена записи (старое, новое) — шаг (новое, старое). Шаги проверяются по папке так, будто предыдущие шаги отмены уже выполнены: папка — это est, и каждый выполненный шаг убирает из неё одно имя и добавляет другое. Имена сравниваются без учёта регистра.
- Файла «откуда» в папке сейчас нет —
«<откуда>» → «<куда>»: «<откуда>» уже нет в папке, шаг пропускается. - Имя «куда» уже занято другим файлом —
«<откуда>» → «<куда>»: «<куда>» уже занято, пропускается. Своим же файлом с другим регистром — не занято. - Иначе шаг выполняется: он в
shagi, папка меняется.
Журнал пустой или из одних заметок — оба списка пустые.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.