Массовое переименование файлов в папке

📁 Кратко: Научитесь массово переименовывать файлы в Python с помощью os.rename() — безопасно, быстро и без сторонних программ.
python batch rename files

Недавно столкнулся с ситуацией: скачал 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.jpgimage_001.jpg
  • screenshot.pngimage_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 🐍

Ваш интерес — лучшая мотивация для новых статей!

Оставьте комментарий