Массовое переименование · Шаг 2 из 4
Пробный показ
Перед тем как трогать триста файлов, программа должна показать, что будет, — и найти беды заранее. Шаблон [N8].[E] даст двум файлам одно имя. В папке уже лежит Фото.jpg, а шаблон хочет назвать так другой файл. Windows и macOS не различают Фото.jpg и фото.jpg — для них это один файл, и переименование молча затрёт чужой.
Что сделать
Проверьте план переименования до дела: уберите файлы, чьё имя не меняется, и найдите все совпадения имён.
Что приходит
pary— список пар(старое, новое)из шага 1, по одной на файлest— имена всех файлов, которые сейчас лежат в папке, — и тех, что переименовываются, и остальных
Что вернуть
Словарь {"plan": [пары], "oshibki": [тексты]}; ошибок нет — oshibki пуст, и план можно выполнять.
Допишите функцию probnyy_pokaz в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Программа печатает план и ошибки. Есть хоть одна ошибка — она не переименовывает ничего, даже с ключом --vypolnit. Нет — план уходит шагу 3.
Три фотографии переименовываются в «Отпуск_001.jpg» … «Отпуск_003.jpg», а в папке уже лежит чужой файл «Отпуск_002.jpg», который никуда не уходит. План — три пары, ошибка одна: «Отпуск_002.jpg» уже есть в папке — «b.jpg» его затрёт. Лежал бы там «отпуск_002.jpg» — ошибка та же: на Windows и macOS это одно имя.
pary = [("a.jpg", "Отпуск_001.jpg"), ("b.jpg", "Отпуск_002.jpg"), ("c.jpg", "Отпуск_003.jpg")]
est = ["a.jpg", "b.jpg", "c.jpg", "Отпуск_002.jpg"]
probnyy_pokaz(pary, est)
{'plan': [('a.jpg', 'Отпуск_001.jpg'), ('b.jpg', 'Отпуск_002.jpg'), ('c.jpg', 'Отпуск_003.jpg')], 'oshibki': ['«Отпуск_002.jpg» уже есть в папке — «b.jpg» его затрёт']}
- План — пары из
paryв том же порядке, кроме тех, где новое имя совпадает со старым буква в букву: их переименовывать незачем. Смена одного регистра (a.JPG→a.jpg) — переименование, оно в плане. - Имена сравниваются без учёта больших и маленьких букв (
lower()), как их сравнивают Windows и macOS. - Ошибки — по парам плана, по порядку, для каждой проверки в таком порядке:
1. Новое имя пустое или в нём есть один из знаков
\ / : * ? " < > |—«<новое>» — недопустимое имя (из «<старое>»), и дальше эту пару не проверять. 2. Это новое имя уже получил файл раньше по плану —«<того файла>» и «<старое>» получат одно имя «<новое>». 3. Файл с таким именем лежит в папке и не переименовывается (его нет среди старых имён плана) —«<новое>» уже есть в папке — «<старое>» его затрёт. Если тот файл сам уходит под другим именем, это не ошибка: в каком порядке переименовывать, решит шаг 3.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.