Пакетное переименование файлов с помощью Python
TL;DR
Пакетное переименование файлов упрощает организацию коллекций документов, фотографий и отчётов. В статье показано простое Python-решение: скрипт принимает шаблон из командной строки и переименовывает все файлы в папке, добавляя счётчик и сохраняя расширения.
Важно: всегда делайте резервную копию или работайте с копией папки перед массовым переименованием.
Пакетное переименование — эффективный способ навести порядок в цифровых файлах. Это особенно полезно, если у файлов нет содержательных или единообразных имён.
Вы можете автоматизировать пакетное переименование с помощью простого Python-скрипта. Передайте шаблон в скрипт, и он переименует все файлы в папке согласно выбранной конвенции именования.
Когда скрипт готов, запустите его в командной строке, и он переименует все файлы в указанной папке.
Что нужно знать прежде чем начать
Короткие определения:
- Пакетное переименование — массовое изменение имён файлов в папке по единому правилу.
- Шаблон — строка, которая задаёт формат нового имени; в примере используется аргумент командной строки с заполнителем для счётчика.
Требования:
- Установлен Python (версия 3.x).
- У вас есть права на чтение/запись в целевой папке.
Как перебрать все файлы в директории
Существует много способов массово переименовать файлы в Windows: через Проводник, PowerShell, сторонние утилиты или командную строку. Один из гибких методов — написание Python-скрипта.
Чтобы переименовать все файлы в папке, нужно перебрать набор файлов в этой директории. Ниже — пошаговый пример и исходный скрипт (полный репозиторий можно разместить на GitHub для удобства).
- Создайте новую папку и поместите туда файлы, которые хотите переименовать:
- Создайте файл batch-rename.py.
- В начале файла импортируйте модуль os. Это позволит работать с файловой системой:
import os- Определите директорию, где находятся файлы:
dir_path = "C:\\Users\\Sharl\\Desktop\\files"Можно также использовать относительный путь. Например, если скрипт и папка с файлами находятся в одной директории:
dir_path = "files"- Инициализируйте счётчик, который будет добавляться к имени файла:
counter = 1- Добавьте цикл for для перебора файлов в директории:
for filename in os.listdir(dir_path):
print("Renaming: " + filename + "...")- Для проверки запустите скрипт из командной строки. Перейдите в папку со скриптом и выполните:
cd Desktop
python batch-rename.pyКак переименовать все файлы по шаблону
Вариант, где пользователь вводит шаблон, например “Financial_Planning”. Скрипт переименует все файлы в указанной папке по шаблону и добавит порядковый номер.
- В начале файла импортируйте модуль sys, чтобы принимать аргументы командной строки:
import sysПри запуске можно передать шаблон так:
python batch-rename.py "Financial_Planning"- Получите переданный аргумент. Если аргумент не указан — покажите сообщение и завершите работу:
commandLineArgs = sys.argv
if len(commandLineArgs) > 1:
pattern = commandLineArgs[1] + "_{}"
else:
print('Enter a pattern for the new filenames as a command line argument')
sys.exit()- Внутри цикла получайте расширение файла:
file_ext = os.path.splitext(filename)[1] - Создавайте новое имя файла по шаблону, добавляя счётчик и расширение:
new_filename = pattern.format(counter) + file_ext- Переименуйте файл:
oldFileName = os.path.join(dir_path, filename)
newFileName = os.path.join(dir_path, new_filename)
os.rename(oldFileName, newFileName)- Увеличьте счётчик:
counter += 1- После цикла выведете подтверждение:
print("All files renamed.")- На командной строке перейдите в папку со скриптом и запустите его с нужным шаблоном:
- Откройте Проводник и убедитесь, что файлы переименованы:
Расширения и надёжность
Короткие рекомендации по улучшению скрипта:
- Фильтруйте только файлы (игнорируйте подпапки) с помощью os.path.isfile.
- Обрабатывайте конфликты имён: проверяйте, существует ли целевой файл, прежде чем вызывать os.rename.
- Поддерживайте кодировку имен (особенно в разных ОС) — используйте pathlib для более удобной кроссплатформенности.
Пример более надёжного фрагмента на pathlib:
from pathlib import Path
p = Path(dir_path)
for f in p.iterdir():
if f.is_file():
ext = f.suffix
new_name = pattern.format(counter) + ext
target = p / new_name
if target.exists():
print(f"Пропуск: {target} уже существует")
else:
f.rename(target)
counter += 1Когда этот метод не годится
- Если нужно сохранить метаданные (даты, EXIF для фото) в виде части имени — требуется дополнительная логика извлечения метаданных.
- Если требуется сложное переименование по нескольким правилам (дата + автор + индекс) — лучше подготовить шаблон или использовать специализированные утилиты.
- При наличии символов, недопустимых в имени файла целевой ОС, потребуется экранирование или замена символов.
Альтернативные подходы
- Встроенные средства: Проводник Windows поддерживает простое переименование (выделите несколько файлов, F2 и введите имя — Windows добавит (1), (2) и т. д.).
- PowerShell: более гибкий подход с командлетами для массовых операций (Get-ChildItem, Rename-Item).
- Сторонние утилиты: Bulk Rename Utility, Advanced Renamer — дают GUI с множеством шаблонов.
- macOS Automator или Finder для пользователей macOS.
Практические правила и эвристики
- Всегда работайте с копией или создавайте резервную копию папки до массовых изменений.
- Начинайте с вывода (print) без фактического переименования — так вы увидите планируемые изменения.
- Используйте последовательные и читаемые шаблоны (например, ProjectName_YYYYMMDD_001).
- Сохраняйте расширения неизменными, чтобы не потерять ассоциацию с программами.
Краткая методология (мини-SOP)
- Сделать резервную копию папки.
- Запустить скрипт в режиме «сухого прогона» (только print).
- Проверить результаты и исправить шаблон при необходимости.
- Запустить фактическое переименование.
- Убедиться, что всё корректно и нет конфликтов имён.
Критерии приёмки
- Все файлы в целевой папке получили новые имена по заданному шаблону.
- Расширения файлов остались прежними.
- Нет коллизий имён — либо они обработаны, либо явно отмечены в логе.
- Сохранены важные метаданные (если это требование проекта).
Быстрая проверка и тесты
Тест-кейсы для проверки скрипта:
- Папка с 0 файлов — скрипт завершает работу без ошибок.
- Файлы с одинаковыми расширениями — все переименованы корректно.
- Наличие подпапок — скрипт не пытается переименовать папки (если это не предусмотрено).
- Файл с именем-целью уже существует — скрипт должен пропустить или переименовать с альтернативой.
Контроль рисков и смягчение
- Риск: потеря данных из-за неверного шаблона. Смягчение: резервная копия и режим предварительного просмотра.
- Риск: неправильная кодировка имён. Смягчение: использовать pathlib и тестировать на выборке файлов.
Кому полезно
- Аналитикам и менеджерам, которым нужно упорядочить отчёты.
- Фотографам для переименования съёмок по проектам и датам.
- Разработчикам и системным администраторам при подготовке наборов файлов.
Итог
Пакетное переименование через Python даёт гибкость и повторяемость. Начните с простого скрипта, протестируйте на копии папки и добавьте проверки на существование файлов и обработку ошибок. Для сложных задач сочетайте Python с утилитами и инструментами вашей ОС.
Дополнительные ресурсы и идеи:
- Обновите скрипт для поддержки регулярных выражений в шаблонах.
- Добавьте логирование изменений в отдельный файл CSV для аудита.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone