Первый скрипт на Python: переименуем тысячу файлов
Тысяча фотографий с именами IMG_0001 до IMG_1000, а нужны понятные названия с датой. Разберём, как переименовать их одним скриптом на Python за 15 минут.

У вас папка с тысячей файлов: IMG_4821.jpg, Снимок экрана 2024-05-10 в 14.22.31.png, договор (копия) (2).pdf. Руками переименовывать — час кликов и гарантированная опечатка. К концу этого текста у вас будет рабочий скрипт на Python, который переберёт все файлы в папке и переименует их по заданному шаблону. На тысячу файлов уйдёт меньше секунды, а на то, чтобы написать и проверить скрипт — минут пятнадцать.
Писать будем для Python 3.10 и новее — проверялось на 3.12. Никаких сторонних библиотек ставить не нужно, всё есть в стандартной поставке.
Что нужно иметь до начала
- Python 3.10+. Проверьте версию: откройте терминал (в Windows — PowerShell, в macOS и Linux — Terminal) и наберите
python --versionилиpython3 --version. Должна вывестись строка видаPython 3.12.2. Если команда не найдена — установите Python с python.org, в Windows-установщике поставьте галочку Add python.exe to PATH. - Папка с файлами и её путь. Например
C:\Users\Ivan\Photosв Windows или/home/ivan/photosв Linux. Путь понадобится в скрипте. - Копия папки. Переименование необратимо: откатить массовую операцию нечем. Скопируйте папку целиком, пока не убедитесь, что скрипт работает как надо.
- Любой текстовый редактор. Подойдёт Блокнот, но лучше VS Code или встроенный в него терминал.
Первый запуск любого скрипта, который меняет файлы, делается в режиме «показать, но не трогать». Сначала распечатайте, что собираетесь сделать, — и только потом снимайте предохранитель.
Шаг за шагом
Создайте файл скрипта. В редакторе создайте файл
rename.pyи положите его куда угодно — хоть на рабочий стол. Папка с файлами и папка со скриптом могут быть разными.Вставьте безопасную версию — она ничего не меняет, только печатает. Скопируйте код целиком:
from pathlib import Path # Путь к папке с файлами. В Windows пишите путь в кавычках как здесь, # обратные слэши задвоены, чтобы Python не принял их за спецсимволы. folder = Path("C:\\Users\\Ivan\\Photos") # Переименовываем только jpg. Меняйте маску под свои файлы: "*.pdf", "*.*". files = sorted(folder.glob("*.jpg")) for number, file in enumerate(files, start=1): # Новое имя: photo_0001.jpg, photo_0002.jpg и так далее. # :04d добавляет ведущие нули до четырёх знаков. new_name = f"photo_{number:04d}{file.suffix}" print(f"{file.name} -> {new_name}") print(f"\nВсего файлов: {len(files)}")Замените путь в переменной
folderна свой.Запустите проверку. В терминале перейдите в папку со скриптом и наберите
python rename.py(илиpython3 rename.py). В терминале должен появиться список пар: слева старое имя, справа новое, а в конце — общее число файлов. Ничего на диске пока не изменилось. Если чисел ноль, а файлы в папке есть — маска*.jpgне совпала с расширением, проверьте её и путь.Снимите предохранитель. Убедились, что новые имена вас устраивают? Добавьте одну строку, которая выполняет переименование. Финальная версия скрипта:
from pathlib import Path folder = Path("C:\\Users\\Ivan\\Photos") files = sorted(folder.glob("*.jpg")) for number, file in enumerate(files, start=1): new_name = f"photo_{number:04d}{file.suffix}" target = file.with_name(new_name) # Не затираем существующий файл с таким же именем. if target.exists(): print(f"Пропуск: {new_name} уже существует") continue file.rename(target) # собственно переименование print(f"{file.name} -> {new_name}") print(f"\nГотово, обработано файлов: {len(files)}")Запустите снова.
python rename.py. Теперь файлы в папке переименуются. Откройте папку в проводнике: должны появитьсяphoto_0001.jpg,photo_0002.jpgи так далее по порядку.
Почему именно так
Модуль pathlib входит в стандартную библиотеку с Python 3.4 и работает одинаково в Windows, macOS и Linux — не придётся возиться с разделителями путей вручную. Метод glob("*.jpg") возвращает только совпавшие с маской файлы, sorted() выстраивает их в предсказуемом порядке, а enumerate(..., start=1) даёт сквозную нумерацию с единицы.
Подставить дату вместо номера
Часто хочется не просто номер, а дату создания файла в имени. Дату берём из времени изменения файла через stat():
from pathlib import Path
from datetime import datetime
folder = Path("C:\\Users\\Ivan\\Photos")
for number, file in enumerate(sorted(folder.glob("*.jpg")), start=1):
# st_mtime — время последнего изменения файла (в секундах).
modified = datetime.fromtimestamp(file.stat().st_mtime)
date_part = modified.strftime("%Y-%m-%d") # 2024-05-10
new_name = f"{date_part}_{number:03d}{file.suffix}"
target = file.with_name(new_name)
if not target.exists():
file.rename(target)
print(f"{file.name} -> {new_name}")Точной даты съёмки в файловой системе нет — st_mtime хранит время изменения файла, которое могло сбиться при копировании. Для EXIF-даты из самого снимка нужна отдельная библиотека, это уже другая тема.
Если не получилось
| Что видите | Причина | Что делать |
|---|---|---|
python: command not found или не является внутренней командой | Python не в PATH или команда называется иначе | Попробуйте python3 вместо python. В Windows — py rename.py |
FileNotFoundError с указанием пути | Неверный путь в folder | Скопируйте путь из адресной строки проводника, задвойте обратные слэши |
| Всего файлов: 0, а файлы есть | Маска не совпала с расширением | Проверьте регистр и расширение: *.JPG, *.jpeg, *.png |
PermissionError | Файл открыт в другой программе | Закройте просмотрщик, редактор, антивирус, повторите запуск |
SyntaxError при запуске | Обрезалась строка или лишний символ при копировании | Скопируйте фрагмент заново целиком, проверьте кавычки |
Что делать дальше
Скрипт выше — заготовка, которую вы теперь будете подгонять под каждую задачу. Следующие шаги, если войдёте во вкус:
- Разберитесь с
argparseиз стандартной библиотеки, чтобы передавать путь и шаблон аргументами командной строки, а не править код. - Добавьте флаг «сухого прогона» (dry-run): по умолчанию только печатать, а переименовывать лишь при явном ключе. Это дисциплина, которая однажды спасёт вам папку.
- Загляните в модуль
shutilиз стандартной библиотеки — им удобно раскладывать файлы по подпапкам, а не только переименовывать.
Главное правило массовых операций с файлами не меняется: сначала копия папки и печать намерений, потом само действие.
AI-стилист и фотограф: Замена фона, ретушь, аватарки, фото для резюме.
Спросить за 20 ₽Источники: pathlib — Object-oriented filesystem paths, документация Python, os and pathlib — работа с файлами, документация Python
Частые вопросы
У меня Python 3.8, код заработает?
Можно ли откатить переименование, если ошибся?
А если два файла получат одинаковое новое имя?
Скрипт залезет в подпапки?
Как переименовать не jpg, а другие файлы?
Терминал пишет 'command not found' на команду python — что делать?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.