No description
- Python 100%
| .gitignore | ||
| merge_reports.py | ||
| README.md | ||
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": "Новый лист"},
]
Порядок запуска
- Поместите ZIP-архивы в соответствующую папку
- Удалите старый
Сводный_отчет.xlsx(скрипт перезапишет) - Запустите
python3 merge_reports.py - Готовый файл появится в той же директории
Производительность
- Парсинг ~350 000 строк из 10 ZIP-архивов занимает 2–4 минуты
- Потребление памяти ~30–60 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()) "