No description
Find a file
2026-07-13 16:14:04 +03:00
.gitignore WB Reports v2026.06.01 2026-07-13 15:48:39 +03:00
merge_reports.py WB Reports v2026.06.01 2026-07-13 15:48:39 +03:00
README.md Добавлен список необходимых пакетов в README 2026-07-13 16:14:04 +03:00

WB Reports v2026.06.01

Объединение ZIP-отчётов Wildberries в один Excel-файл.

Возможности

  • Читает архивы из двух папок: Отчеты скин и Отчеты ВП
  • Извлекает номер отчёта и ID селлера из имени файла
  • Формирует XLSX с двумя листами (по папке) + лист «Калькулятор»
  • Калькулятор: сводка сумм по колонке «Вайлдберриз реализовал Товар (Пр)» с группировкой по дате продажи
  • AutoFilter на каждом листе
  • Потоковая обработка — без хранения всех строк в памяти
  • Только стандартная библиотека Python (без pandas/openpyxl)

Зависимости

Обязательные

Скрипт использует только стандартную библиотеку Python. Дополнительных пакетов не требуется.

  • os — работа с путями и файлами
  • re — разбор XML (regex)
  • zipfile — чтение/запись XLSX (ZIP-архив)
  • xml.etree.ElementTree — потоковый парсинг (не используется в финальной версии, заменён на regex)
  • sys — выход по ошибке
  • shutil — копирование временных файлов

Опционально

Для ускорения разработки/отладки могут пригодиться:

Пакет Назначение
lxml Более быстрый XML-парсер (замена iterparse)
pandas + openpyxl Прямая работа с XLSX (если доступен pip)
black Форматирование кода

Скрипт работает без них.

Использование

python3 merge_reports.py

На выходе — Сводный_отчет.xlsx.

Структура

.
├── merge_reports.py       # скрипт
├── Отчеты скин/           # исходные ZIP-архивы (селлер 70427)
├── Отчеты ВП/             # исходные ZIP-архивы (селлер 11699)
└── Сводный_отчет.xlsx     # результат

Формат имени архива

Еженедельный детализированный отчет №{номер}_{id_селлера}.zip

Рекомендации

Добавление новой группы отчётов

Допишите в SOURCES в начале скрипта:

SOURCES = [
    {"dir": ".../Отчеты скин",  "sheet": "Скин"},
    {"dir": ".../Отчеты ВП",    "sheet": "ВП"},
    {"dir": ".../Новая папка", "sheet": "Новый лист"},
]

Порядок запуска

  1. Поместите ZIP-архивы в соответствующую папку
  2. Удалите старый Сводный_отчет.xlsx (скрипт перезапишет)
  3. Запустите python3 merge_reports.py
  4. Готовый файл появится в той же директории

Производительность

  • Парсинг ~350 000 строк из 10 ZIP-архивов занимает 24 минуты
  • Потребление памяти ~3060 MB (потоковая обработка)
  • На диске временно создаётся ~860 MB sheet.xml (удаляется автоматом)
  • Если отчётов много — следите за свободным местом в /tmp

Известные особенности

  • Дата продажи должна быть в формате YYYY-MM-DD для корректной группировки в калькуляторе
  • Пустые ячейки и ячейки со стилями (s="1") обрабатываются корректно
  • CSV не поддерживается — только xlsx внутри ZIP
  • Скрипт написан на чистом stdlib; если появится pip — можно ускорить парсинг через lxml

Если что-то пошло не так

  • Ошибка No module named — не нужна, скрипт использует только stdlib
  • Ошибка FileNotFoundError — проверьте пути в SOURCES
  • В листе «ВП» пустые данные — ZIP может быть другого формата; проверьте через unzip -l файл.zip
  • Для отладки одиночного архива:
    python3 -c "
    

import zipfile, re with zipfile.ZipFile('архив.zip') as z: print(z.namelist()) "