Skip to content

📱📷➡️🗂Sort and organize your files (photos, videos and other media from iphone, ipad, camera etc.) by date

License

Notifications You must be signed in to change notification settings

Volodichev/sort_files

Repository files navigation

Sort Files

Утилита для сортировки фото/видео по дате съёмки (EXIF, метаданные Windows или дата файла). Складывает файлы по структуре result/YYYY/MM/DD/filename.ext, для файлов без EXIF создаёт папку no_exif, а скриншоты складывает в отдельную папку screenshots.

Важно: перед использованием сделайте резервную копию ваших фото/видео.

Возможности

  • EXIF извлекается несколькими бэкендами (Pillow, pyexiv2*, exifread, piexif) с fallback на дату файла или свойства Windows.
  • Поддержка вспомогательных файлов .AAE, .THM (копируются вместе с основным файлом).
  • GUI на PyQt6 и CLI-режим.
  • Тесты на pytest для ключевых сценариев.
  • Работает на Windows; на Linux/macOS функции, завязанные на pywin32, будут отключены автоматически.

Требования

  • Python 3.10+
  • Зависимости из requirements.txt (pywin32 подтянется только на Windows).

Установка

git clone https://github.com/Volodichev/sort_files.git
cd sort_files
python -m venv .venv
.venv\Scripts\activate        # Windows
pip install -r requirements.txt

CLI

python sort_files.py --source C:\media\raw --result C:\media\result

Полезные флаги:

  • --no-group-no-exif — не складывать файлы без EXIF в no_exif, использовать дату ОС.
  • --source, --result — явные пути к папкам (по умолчанию используются source/ и result/ в корне проекта).
  • --version — версия приложения.

GUI (PyQt6)

python gui.py

Укажите source и result, при необходимости поправьте расширения и флаги, затем нажмите «Запустить сортировку».

Тесты

pip install -r requirements.dev.txt
pytest -q

Конфигурация

Основные настройки в config.py:

  • SUPPORTED_EXTENSIONS, SETTING_EXTENSIONS
  • FIND_SETS_FILES — искать вспомогательные файлы
  • GROUP_NO_EXIF — складывать файлы без EXIF в отдельную папку
  • Имена рабочих директорий (SOURCE_FOLDER, RESULT_FOLDER, SCREENSHOTS_FOLDER и т.д.)

Структура проекта

  • sort_files.py — CLI-вход
  • gui.py — PyQt6 GUI
  • sorter.py — основная логика сортировки
  • exif_utils.py — извлечение метаданных
  • fs_utils.py — файловые операции
  • tests/ — тестовые данные и pytest-спеки

Частые проблемы

  • *pyexiv2 или pywin32 не ставятся на nix. Библиотека пропускается, остальные бэкенды продолжат работать.
  • Большие изображения и DecompressionBombWarning. Pillow отключает лимит размеров в коде, но будьте осторожны с подозрительными файлами.

Если проект помог, поставьте звёздочку и поделитесь отзывом 🙂

About

📱📷➡️🗂Sort and organize your files (photos, videos and other media from iphone, ipad, camera etc.) by date

Topics

Resources

License

Stars

Watchers

Forks

Languages