Пример взял отсюда
https://habr.com/post/245397/Банковская выписка(txt), которую нужно обработать.
spoiler1CClientBankExchange
ВерсияФормата=1.02
Кодировка=Windows
Отправитель=Cистема Солнышко Интернет-Банк
Получатель=Бухгалтерский учет, редакция 4.4
ДатаНачала=27.11.2013
ДатаКонца=27.11.2014
РасчСчет=12345678901234567890
СекцияРасчСчет
ДатаНачала=27.11.2013
ДатаКонца=27.11.2014
РасчСчет=12345678901234567890
НачальныйОстаток=0
ВсегоПоступило=68770
ВсегоСписано=68770
КонечныйОстаток=0
КонецРасчСчет
СекцияДокумент=Банковский ордер
Номер=1
Дата=26.12.2013
Сумма=1000
ДатаСписано=26.12.2013
ДатаПоступило=
ПлательщикСчет=12345678901234567890
Плательщик=ИНН 778899001122 Иванов Иван Иванович (ИП)
ПлательщикИНН= 778899001122
Плательщик1=Иванов Иван Иванович (ИП)
ПлательщикРасчСчет=12345678901234567890
ПлательщикБанк1=ОАО АКБ "Солнышко"
ПлательщикБанк2=г. МОСКВА
ПлательщикБИК=044525201
ПлательщикКорсчет=98765432198765432100
ПлательщикКорсчет=98765432198765432100
ПолучательСчет=89765456787654345678
Получатель=ИНН 7765434566\775001001 ОАО АКБ "Солнышко"
ПолучательИНН=7765434566
Получатель1=ОАО АКБ "Солнышко"
ПолучательРасчСчет=89765456787654345678
ПолучательБанк1=ОАО АКБ "Солнышко"
ПолучательБанк2=г. МОСКВА
ПолучательБИК=044525201
ПолучательКорсчет=98765432198765432100
ВидОплаты=17
НазначениеПлатежа=Комиссия за открытие счета согласно тарифам ОАО АКБ "Солнышко"
КонецДокумента
СекцияДокумент=Платежное поручение
Номер=176
Дата=26.12.2013
Сумма=4770
ДатаСписано=
Плательщик=ИНН 7725747515\772501001 ООО "ВИОСН"
ПлательщикИНН=7725747515
ПлательщикСчет=40702810822000034869
Плательщик1=ООО "ВИОСН"
ПлательщикРасчСчет=40702810822000034869
ПлательщикБанк1=АКБ "АБСОЛЮТ БАНК" (ОАО)
ПлательщикБанк2=г. МОСКВА
ПлательщикБИК=044525976
ПлательщикКорсчет=30101810500000000976
ДатаПоступило=26.12.2013
Получатель=ИНН 778899001122 ИП Иванов Иван Иванович
ПолучательИНН=778899001122
ПолучательСчет=12345678901234567890
Получатель1=ИП Иванов Иван Иванович
ПолучательРасчСчет=12345678901234567890
ПолучательБанк1=ОАО АКБ "Солнышко"
ПолучательБанк2=г. МОСКВА
ПолучательБИК=044525201
ПолучательКорсчет=98765432198765432100
ВидОплаты=01
СрокПлатежа=26.12.2013
Очередность=5
НазначениеПлатежа=Оплата по счету №1 от 26 декабря (за услуги по обслуживанию сайта ) НДС не облагается.
КонецДокумента
СекцияДокумент=Банковский ордер
Номер=1
Дата=10.01.2014
Сумма=20
ДатаСписано=10.01.2014
ДатаПоступило=
ПлательщикСчет=12345678901234567890
Плательщик=ИНН 778899001122 Иванов Иван Иванович (ИП)
ПлательщикИНН=778899001122
Плательщик1=Иванов Иван Иванович (ИП)
ПлательщикРасчСчет=12345678901234567890
ПлательщикБанк1=ОАО АКБ "Солнышко"
ПлательщикБанк2=г. МОСКВА
ПлательщикБИК=044525201
ПлательщикКорсчет=98765432198765432100
ПолучательСчет=70601810200021210220
Получатель=ИНН 7765434566\775001001 ОАО АКБ "Солнышко"
ПолучательИНН=7765434566
Получатель1=ОАО АКБ "Солнышко"
ПолучательРасчСчет=70601810200021210220
ПолучательБанк1=ОАО АКБ "Солнышко"
ПолучательБанк2=г. МОСКВА
ПолучательБИК=044525201
ПолучательКорсчет=98765432198765432100
ВидОплаты=17
НазначениеПлатежа=Плата за прием и обработку платежных документов
КонецДокумента
СекцияДокумент=Платежное поручение
Номер=1
Дата=10.01.2014
Сумма=3500
ДатаСписано=10.01.2014
Плательщик=ИНН 778899001122\772801001 Иванов Иван Иванович (ИП)
ПлательщикИНН=778899001122
ПлательщикСчет=12345678901234567890
Плательщик1=Иванов Иван Иванович (ИП)
ПлательщикРасчСчет=12345678901234567890
ПлательщикБанк1=ОАО АКБ "Солнышко"
ПлательщикБанк2=г. МОСКВА
ПлательщикБИК=044525201
ПлательщикКорсчет=98765432198765432100
ДатаПоступило=
Получатель=ИНН 7707704692\772801001 ОАО "Единая электронная торговая площадка"
ПолучательИНН=7707704692
ПолучательСчет=40702810000760001497
Получатель1=ОАО "Единая электронная торговая площадка"
ПолучательРасчСчет=40702810000760001497
ПолучательБанк1=ОАО "БАНК МОСКВЫ"
ПолучательБанк2=г. МОСКВА
ПолучательБИК=044525219
ПолучательКорсчет=30101810500000000219
ВидОплаты=01
СтатусСоставителя=01
ПлательщикКПП=772801001
ПолучательКПП=772801001
ПоказательКБК=00000000000000000000
ОКАТО=0
ПоказательОснования=0
ПоказательПериода=0
ПоказательНомера=0
ПоказательДаты=10.01.2014
ПоказательТипа=0
СрокПлатежа=10.01.2014
Очередность=5
НазначениеПлатежа=Сумма 3500.00, в т.ч. НДС - 388,99
КонецДокумента
КонецФайла
Код на Python
# Пустые списки (массивы)
a = [] # Тут будут строки файла
b = [] # Тут строки файла, разделенные знаком =, где b[i][0] = "Ключ", b[i][1] = "Значение"
main = [] # Основная информация
f = open("f.txt") # Открываю файл выписки f.txt
a = f.readlines() # Читаю файл построчно
l = [ line.rstrip() for line in a ] # Удаляю символ \n
for x in l:
b.append(x.split("=")) # Разделаю строки по = символу и добавляю в список b
# Читаю основную инфу (до первой строки 'СекцияДокумент')
for i in range(len(b)):
if b[i][0] == 'СекцияДокумент':
break
else:
main.append(b[i]) # Добавляю основную инфу в список main
key = 0
doc = []
q = {key: []} # Завожу словарь для хранения документов
# Начинаю делить по документам
for k in range(len(main), len(b)):
if b[k][0] == 'КонецДокумента': # 1 документ закончен
q[key] = doc # Добавляю документ в словарь
doc = [] # Очищаю список doc
key += 1 # Ключ словаря увеличиваю +1 для след. документа
elif b[k][0] == 'КонецФайла': # Если конец файла, то
close(f) # Закрываем файл
break # Выходим
else:
doc.append(b[k][1]) # Пока документ не закончился,
# Добавляем строки (после знака =) в список doc
Дальше хотел создать в models.py поля и загрузить циклом из словаря данные в эти поля.
Но фишка в чем, напр.,
грубо говоря, в документе (СекцияДокумент) 1 - строк 17, в документе 2 - 19, документе 3 - 23.
Соответственно , для 1 нужно 17 полей, для 2 - 19 и т.д. К тому же в документах некоторые строки повторяются, некоторые переставлены местами. Т.е. формат не фиксирован.
Как правильно реализовать?