Python-скрипт для автоматического извлечения данных о движении денежных средств из PDF-выписок Т-Банка (Tinkoff) и сохранения их в структурированном формате JSON.
Проект ориентирован на работу с PDF-файлами, содержащими текстовый слой (не сканами), и учитывает особенности форматирования банковских выписок: многострочные описания операций, дублирование дат и сумм, а также служебную информацию банка.
- 📄 Извлечение текста из PDF с помощью
pdfplumber - 🔍 Парсинг только нужного раздела выписки:
- начало: «Движение средств за период»
- конец: «Пополнения:»
- 🧹 Игнорирование юридической и служебной информации банка
- 🔗 Склейка многострочных операций в одну логическую запись
- 🧠 Разбор операций с помощью регулярных выражений
- 📤 Экспорт результата в
output.json
Текст извлекается постранично. Парсинг начинается после строки
«Движение средств за период» и заканчивается перед «Пополнения:».
Строки, содержащие юридическую или служебную информацию (БИК, ИНН, лицензия и т.д.), автоматически игнорируются.
Каждая новая операция определяется по строке, начинающейся с даты формата ДД.ММ.ГГГГ.
Если строка не начинается с даты, она считается продолжением предыдущей операции и добавляется к ней. Это позволяет корректно обрабатывать длинные описания платежей.
После склейки каждая строка разбирается регулярным выражением, которое извлекает:
- 📅 дату и время операции
- 📅 дату списания
- 💰 сумму в валюте операции
- 💰 сумму операции в валюте карты
- 🧾 описание операции
- 💳 последние цифры карты (если присутствуют)
Если строку не удалось разобрать, она выводится в консоль с предупреждением.
Каждая операция сохраняется в виде объекта и добавляется в итоговый список.
Пример результата:
{
"Дата и время операции": "03.09.2025 21:29",
"Дата списания": "03.09.2025 21:30",
"Сумма в валюте операции": "-955.00 ₽",
"Сумма операции в валюте карты": "-955.00 ₽",
"Описание операции": "Внешний перевод по номеру телефона +79600000000",
"Номер карты": "8296"
}