Python-скрипт: автоматическая сортировка файлов по типам в папке

🗂️ Кратко: Создайте скрипт, который за 2 секунды разберёт хаотичную папку «Загрузки»: картинки — в Images, PDF — в Docs. Всё — с обработкой ошибок и дублей.
Как в python разобрать папку

За несколько месяцев в папке «Загрузки» у меня накопилось больше 2000 файлов: скриншоты, отчёты, архивы, фото, видео… И открывать её и искать нужный файл просто стало мукой.

Я мог бы вручную перекидывать всё в подпапки, но зачем, если можно создать Python-скрипт, который сделает это все за меня, я его настроил чтобы он запускался раз в неделю и сортировал мои файлы.

В этой статье я покажу, как в python делается сортировка файлов:

  • по типам (изображения, документы, видео и т.д.)
  • с обработкой ошибок
  • с проверкой существования файлов
  • и без потери данных

Готовый код можно сразу использовать в своих задачах.

Как это работает: логика сортировки

Скрипт анализирует расширение файла (например, .jpg, .pdf, .zip) и перемещает его в соответствующую папку:

  • .jpg, .pngImages/
  • .pdf, .docx, .txtDocuments/
  • .mp4, .aviVideos/
  • .zip, .rarArchives/

Если папки нет — она создаётся автоматически. Если файл с таким именем уже существует — создаётся копия с суффиксом _copy1.

Шаг 1. Импорты и настройка путей

Подключаем стандартные библиотеки

import os
import shutil
from pathlib import Path
  • os и pathlib — для работы с путями
  • shutil — для перемещения файлов

Указываем папку для сортировки

SOURCE_DIR = Path.home() / "Downloads"  # или любой путь, например: Path("/home/user/chaos")

💡 Path.home() возвращает домашнюю папку пользователя — скрипт будет работать на Windows, Linux и macOS.

Шаг 2. Определяем категории и расширения

Создаём словарь типов

FILE_TYPES = {
    "Images": {".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp"},
    "Documents": {".pdf", ".docx", ".txt", ".xlsx", ".pptx", ".csv"},
    "Videos": {".mp4", ".avi", ".mov", ".mkv", ".flv"},
    "Archures": {".zip", ".rar", ".7z", ".tar", ".gz"},
    "Audio": {".mp3", ".wav", ".flac", ".aac"},
    "Code": {".py", ".js", ".html", ".css", ".json", ".sh"}
}

📌 Вы можете легко расширить этот словарь под свои нужды.

Шаг 3. Функция перемещения с защитой от дублей

Как избежать перезаписи

def move_file(src_path, dest_dir):
    dest_dir.mkdir(exist_ok=True)  # создаём папку, если её нет
    dest_path = dest_dir / src_path.name

    # Если файл уже есть — добавляем суффикс
    counter = 1
    while dest_path.exists():
        name, ext = src_path.stem, src_path.suffix
        dest_path = dest_dir / f"{name}_copy{counter}{ext}"
        counter += 1

    shutil.move(str(src_path), str(dest_path))
    print(f"✅ Перемещён: {src_path.name} → {dest_dir.name}")

💡 Используем str(), потому что shutil в старых версиях Python не всегда принимает Path.

Шаг 4. Основной цикл сортировки

def sort_files():
    for item in SOURCE_DIR.iterdir():
        if item.is_file():  # пропускаем папки
            file_ext = item.suffix.lower()
            
            # Определяем категорию
            target_dir = None
            for folder, extensions in FILE_TYPES.items():
                if file_ext in extensions:
                    target_dir = SOURCE_DIR / folder
                    break
            
            # Если тип неизвестен — не трогаем
            if target_dir:
                move_file(item, target_dir)
            else:
                print(f"❓ Неизвестный тип: {item.name}")

Шаг 5. Запуск и безопасность

Добавьте защиту от случайного запуска:

if __name__ == "__main__":
    print(f"Сортировка папки: {SOURCE_DIR}")
    confirm = input("Продолжить? (y/n): ")
    if confirm.lower() == "y":
        sort_files()
        print("🏁 Готово!")
    else:
        print("Отмена.")

⚠️ Важно: этот скрипт перемещает файлы, а не копирует. Если хотите копировать — замените shutil.move на shutil.copy2.

Дополнительно: логирование и автоматический запуск

Сохраняем отчёт

import logging

logging.basicConfig(
    filename=SOURCE_DIR / "sort_log.txt",
    level=logging.INFO,
    format="%(asctime)s - %(message)s",
    encoding="utf-8"
)

# Внутри move_file():
logging.info(f"Перемещён: {src_path} → {dest_path}")

Теперь у вас будет журнал всех перемещений.

Как работает автоматический запуск через cron (для начинающих)

Cron — это встроенный планировщик задач в Linux и macOS. Он позволяет запускать скрипты в заданное время, без вашего участия.

Пример строки:

0 22 * * 0 /usr/bin/python3 /home/user/sort_files.py

Разберём по частям:

ЧАСТЬЗНАЧЕНИЕ
0Минута (0 = начало часа)
22Час (22 = 22:00, т.е. 10 вечера)
*День месяца (любой)
*Месяц (любой)
0День недели (0 = воскресенье)
/usr/bin/python3Путь к Python (узнать можно командой
/home/user/sort_files.pyПолный путь к вашему скрипту

Как добавить задачу:

  • Откройте терминал
  • Введите: crontab -e
  • Добавьте строку (отредактируйте пути под себя):
0 22 * * 0 /usr/bin/python3 /home/ваше_имя/sort_files.py
  • Сохраните файл (в nano — Ctrl+O, Enter, Ctrl+X)

Чтобы узнать путь к Python:

which python3

Чтобы узнать путь к скрипту:

pwd  # выполните в папке со скриптом

Теперь каждое воскресенье в 22:00 ваша папка будет автоматически упорядочена.

Что делать на Windows?

В Windows cron нет, но есть Планировщик задач:

  • Создайте .bat-файл:
@echo off
cd C:\Users\ваше_имя\scripts
python sort_files.py
  • Откройте Планировщик задачСоздать задачу
  • Укажите время (например, каждое воскресенье в 22:00)
  • В действии укажите путь к .bat-файлу

Заключение

Надеюсь статья для вас будет полезной и вы теперь знаете как:

✅ Автоматически сортировать файлы по типам
✅ Обрабатывать дубли без потерь
✅ Создавать папки на лету
✅ Делать скрипт безопасным и многоразовым
✅ Запускать его автоматически каждую неделю

Этот инструмент особенно полезен для:

  • Очистки папки «Загрузки»
  • Подготовки данных перед архивацией
  • Упорядочивания рабочего пространства

🐍 Сохраните скрипт — и вы забудете о хаосе в файлах.

🔁 Если вам нравится автоматизация на Python, посмотрите также:
python бэкап файлов — резервное копирование с датой и логами
python api загрузить файл — отправка файлов через API
чистый код python — как писать понятные и поддерживаемые скрипты
💬 Остались вопросы? Пишите в комментариях — с радостью уточню, дополню или помогу с вашим кодом.
📢 Подписывайтесь на Telegram-канал PythonAuto, чтобы не пропустить новые гайды по автоматизации, парсингу и Python.
👉 Ваш интерес — лучшая мотивация для новых статей!

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