os.rename() — безопасно, быстро и без сторонних программ.

Недавно столкнулся с ситуацией: скачал 50 скриншотов с Playwright-тестов, а они назывались screenshot_1.png, screenshot_2_old.png, final.png, img (2).png… Полный хаос.
Вручную переименовывать — не вариант. Тут-то и вспомнил: Python может всё — даже навести порядок в папке за 10 строк кода.
В этой статье покажу, как массово переименовать файлы — добавить дату, нумерацию, префикс, обработать подпапки и избежать ошибок. Всё на базовых модулях: os и datetime.
Оглавление
Почему массовое переименование — полезный навык?
Если вы:
- Парсите сайты и сохраняете изображения
- Делаете резервные копии
- Работаете с фото/видео
- Тестируете скрипты и генерируете отчёты
— вам регулярно нужно приводить имена файлов к единому формату.
Python позволяет автоматизировать это раз и навсегда.
Базовый подход: os.listdir() + os.rename()
Модуль os входит в стандартную библиотеку Python — ничего устанавливать не нужно.
Шаг 1. Получаем список файлов
import os
folder = "screenshots"
files = os.listdir(folder)
print(files) # ['img1.png', 'photo.jpg', ...]
📚 Документация: os.listdir()
Шаг 2. Переименовываем файл
old_path = os.path.join(folder, "img1.png")
new_path = os.path.join(folder, "screenshot_001.png")
os.rename(old_path, new_path)
⚠️ Важно: используйте
os.path.join()— так путь будет работать и на Windows, и на Linux.
Пример: добавляем нумерацию к файлам
Создадим скрипт, который превратит:
photo.jpg→image_001.jpgscreenshot.png→image_002.png
import os
folder = "screenshots"
prefix = "image"
# Получаем только файлы (игнорируем папки)
files = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f))]
for i, filename in enumerate(files, start=1):
name, ext = os.path.splitext(filename) # разделяем имя и расширение
new_name = f"{prefix}_{i:03d}{ext}" # image_001.jpg
old_path = os.path.join(folder, filename)
new_path = os.path.join(folder, new_name)
os.rename(old_path, new_path)
print(f"Переименовано: {filename} → {new_name}")
✅ Результат:
image_001.jpg
image_002.png
image_003.jpeg
🔢
:03dозначает: число с ведущими нулями, 3 цифры.
Защита от ошибок: проверяем, существует ли файл
Если файл с новым именем уже есть — os.rename() перезапишет его без предупреждения!
Добавим проверку:
if os.path.exists(new_path):
print(f"⚠️ Файл {new_name} уже существует — пропускаем.")
else:
os.rename(old_path, new_path)
Ещё лучше — генерировать уникальное имя (например, с временной меткой):
from datetime import datetime
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
new_name = f"{prefix}_{timestamp}{ext}"
Работа с подкаталогами (рекурсивное переименование)
Если файлы лежат в подпапках — используйте os.walk():
import os
root_folder = "projects"
for dirpath, dirnames, filenames in os.walk(root_folder):
for i, filename in enumerate(filenames, start=1):
old_path = os.path.join(dirpath, filename)
name, ext = os.path.splitext(filename)
new_name = f"doc_{i:03d}{ext}"
new_path = os.path.join(dirpath, new_name)
if not os.path.exists(new_path):
os.rename(old_path, new_path)
print(f"→ {new_path}")
Этот скрипт обойдёт все вложенные папки и переименует файлы в каждой.
Советы для продвинутого использования
Фильтруйте по расширению:
if filename.endswith(('.jpg', '.png')):
Сохраняйте лог переименований:
with open("rename_log.txt", "a") as log:
log.write(f"{old_name} → {new_name}\n")
Тестируйте на копии папки — особенно с важными файлами!
Заключение
Массовое переименование файлов — одна из тех задач, где Python сияет.
С помощью всего двух функций — os.listdir() и os.rename() — вы можете:
✅ Привести порядок в архивах
✅ Автоматизировать обработку медиа
✅ Подготовить данные для скриптов
✅ Избежать ручной рутины
И всё это — без установки программ вроде Bulk Rename Utility, прямо из консоли или cron-задачи.
🐍 Сохраните этот скрипт — он пригодится снова и снова.
Если что-то осталось непонятным — пишите в комментариях! С радостью уточню, дополню или помогу с вашим кодом.
А чтобы не пропустить новые простые и полезные гайды по Python, автоматизации и разработке — подписывайтесь на мой Telegram-канал: PythonAuto 🐍
Ваш интерес — лучшая мотивация для новых статей!