
За несколько месяцев в папке «Загрузки» у меня накопилось больше 2000 файлов: скриншоты, отчёты, архивы, фото, видео… И открывать её и искать нужный файл просто стало мукой.
Я мог бы вручную перекидывать всё в подпапки, но зачем, если можно создать Python-скрипт, который сделает это все за меня, я его настроил чтобы он запускался раз в неделю и сортировал мои файлы.
В этой статье я покажу, как в python делается сортировка файлов:
- по типам (изображения, документы, видео и т.д.)
- с обработкой ошибок
- с проверкой существования файлов
- и без потери данных
Готовый код можно сразу использовать в своих задачах.
Оглавление
Как это работает: логика сортировки
Скрипт анализирует расширение файла (например, .jpg, .pdf, .zip) и перемещает его в соответствующую папку:
.jpg,.png→Images/.pdf,.docx,.txt→Documents/.mp4,.avi→Videos/.zip,.rar→Archives/
Если папки нет — она создаётся автоматически. Если файл с таким именем уже существует — создаётся копия с суффиксом _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 — как писать понятные и поддерживаемые скрипты