Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def get_text(file: PathLike):
- #regex = re.compile(r"([А-Яа-я]+\s*\d*\.*\s*\,*\s*)")#^([^+]*)^
- #regex = re.compile(r"^[А-Яа-я] |(^[^+])([^ ]* .*)([^|^+^"
- # r"$]$)") #^(?![\n+|]).*$
- #regex = re.compile(r"(^[^+]*^)\s*([^ ]* .*)([^|+\n]$)") #^[^+]*^\s[^ ]* .*[^|+\n\
- # +]$
- temp = {}
- get_full_space = []
- get_full_without_space = []
- regex = re.compile(r"^((?![\n+|]).)*$")
- for i, line in enumerate(open(file)):
- for match in re.finditer(regex, line):
- print('Found on line %s: %s' % (i + 1, match.group().strip()))
- if i + 1 not in temp:
- temp[i + 1] = []
- temp[i + 1].append(match.group().strip())
- for k2, k1 in zip(list(temp)[1:], temp):
- #get_full += temp[k2] + temp[k1]
- for x in temp[k1]:
- for y in temp[k2]:
- if k2 - k1 == 1:
- #get_full_space.append(x + y)
- get_full_without_space.append((x + ' ' + y).strip())
- for x in temp[1]:
- get_full_without_space.append(x)
- #print(type(match.group()))
- #s = inp.read().split()
- #smath = re.findall(s,regex)
- #print([i.replace(' ','') for i in inp.read().split('\n')])
- return get_full_without_space
- if __name__ == '__main__':
- import parser
- """
- Here you can see usages and some tests for form.
- If there are everything works, you ain't no broken anything or build the right model.
- """
- total = {}
- file = r"ur_file"
- bf = BankForm(file)
- check = bf.to_df()
- temp = pd.DataFrame()
- test_mas = get_text(file)
- df = pd.DataFrame()
- dictionary_f115_text = {
- 'Банковская отчетность': 'Банковская отчетность',
- 'Раздел_1': 'Раздел 1. Информация о качестве активов, оцениваемых в целях создания резерва на возможные потери',
- 'Раздел_2': 'Раздел 2. Информация по сгруппированным в портфели однородным требованиям и ссудам, предоставленным юридическим лицам',
- 'Раздел_3': 'Раздел 3. Информация по сгруппированным в портфели однородным требованиям и ссудам, предоставленным физическим лицам',
- 'Раздел_4': 'Раздел 4. Информация по элементам расчетной базы резервов на возможные потери, предусмотренным пунктом 2.7 Положения Банка России № 611-П', #todo check this
- 'Раздел_5': '4. Информация о ценных бумагах, учтенных на балансовых счетах, права на которые удостоверяются депозитариями',
- 'Раздел_6': '5. Информация о справедливой стоимости ценных бумаг, изменение первоначальной стоимости которых отражается в бухгалтерском учете путем создания резервов на возможные потери',
- 'Раздел_7': '6. Информация о финансовых активах, оцениваемых по справедливой стоимости',
- #'Раздел_Справочно': 'Раздел "Справочно:"',
- }
- dictionary_f115_headers = {
- 'Банковская отчетность': ['Код территории по ОКАТО', 'Код кредитной организации (филиала) по ОКПО',
- 'Код кредитной организации (филиала) Регистрационный номер (/порядковый номер)'],
- 'Раздел_1': ['Номер строки', 'Состав активов', 'Сумма требования', 'Категория Качества I',
- 'Категория Качества II', 'Категория Качества III', 'Категория Качества IV', 'Категория Качества V','Просроченная задолженность до 30 дней',
- 'Просроченная задолженность от 31 до 90 дней', 'Просроченная задолженность до 91 до 180 дней','Просроченная задолженность свыше 180 дней',
- 'Резерв на возможные потери расчетный', 'Резерв на возможные потери расчетный с учетом обеспечения', 'Резерв на возможные потери фактически сформированный итого',
- 'Резерв на возможные потери фактически сформированный по категориям качества II', 'Резерв на возможные потери фактически сформированный по категориям качества III',
- 'Резерв на возможные потери фактически сформированный по категориям качества IV', 'Резерв на возможные потери фактически сформированный по категориям качества V',
- 'Корректировка резерва на возможные потери до оценочного резерва под ожидаемые кредитные убытки'],
- 'Раздел_2': ['Номер строки', 'Наименование статьи', 'Сумма требований', 'Сформированный резерв на возможные потери',
- 'Корректировка резерва на возможные потери до оценочного резерва под ожидаемые кредитные убытки'],
- 'Раздел_3': ['Номер строки', 'Наименование статьи', 'Сумма требований', 'Сформированный резерв на возможные потери',
- 'Корректировка резерва на возможные потери до оценочного резерва под ожидаемые кредитные убытки'],
- 'Раздел_4': ['Номер строки', 'Наименование статьи', 'Сумма активов',
- 'Сформированный резерв на возможные потери'],
- 'Раздел_5': ['Номер строки', 'Наименование депозитария', 'ИНН депозитария',
- 'Номер лицензии депозитория', 'Количество ценных бумаг шт.', 'Балансовая стоймость ценных бумаг, тыс. руб.',
- 'Справедливая стоимость ценных бумаг, тыс. руб.',
- 'Сформированный резерв на возможные потери тыс. руб. в соответствии с Положением № 177-П',
- 'Сформированный резерв на возможные потери тыс. руб. в соответствии с Указанием № 8261-У',
- 'Сформированный резерв на возможные потери тыс. руб. итого ( гр.3 + гр.5 )'],
- 'Раздел_6': ['Номер строки', 'Состав активов', 'Сумма требований', 'Сформированный резерв на возможные потери',
- 'Корректировка резерва на возможные потери до оценочного резерва под ожидаемые кредитные убытки',
- 'Справедливая стоимость'],
- 'Раздел_7': ['Номер строки', 'Наименование финансового актива', 'Сумма требования Балансовая стоимость',
- 'Сумма требования Балансовая стоимость без учета корректировок итого',
- 'Сумма требования Балансовая стоимость без учета корректировок по категориям качества I',
- 'Сумма требования Балансовая стоимость без учета корректировок по категориям качества II',
- 'Сумма требования Балансовая стоимость без учета корректировок по категориям качества III',
- 'Сумма требования Балансовая стоимость без учета корректировок по категориям качества IV',
- 'Сумма требования Балансовая стоимость без учета корректировок по категориям качества V',
- 'Фактически сформированный резерв на возможные потери итого',
- 'Фактически сформированный резерв на возможные потери по категориям качества II',
- 'Фактически сформированный резерв на возможные потери по категориям качества III',
- 'Фактически сформированный резерв на возможные потери по категориям качества IV',
- 'Фактически сформированный резерв на возможные потери по категориям качества V'],
- #'Раздел_Справочно': ['Номер строки', 'Наименование депозитария', 'ИНН депозитария',
- #'Номер лицензии депозитория', 'Количество ценных бумаг шт.',
- # 'Балансовая стоймость ценных бумаг, тыс. руб.',
- # 'Справедливая стоимость ценных бумаг', ]
- }
- dictionary_f135_text = {
- 'Банковская_отчетность' : 'Банковская отчетность',
- 'Раздел_1': 'Раздел 1. Расшифровки отдельных балансовых счетов для расчета обязательных нормативов',
- 'Раздел_2' : 'Раздел 2. Отдельные показатели деятельности кредитной организации, используемые для расчета обязательных нормативов, тыс. руб.',
- 'Раздел_3' : 'Раздел 3. Значения обязательных нормативов',
- 'Раздел_3a' : 'Раздел 3а. Информация по расчету обязательных нормативов',
- 'Раздел_3б' : 'Раздел 3б. Переменные и корректировки для расчета обязательных нормативов',
- 'Раздел_4' : 'Раздел 4. Информация о нарушении обязательных нормативов и (или) снижении значения норматива достаточности базового капитала банка (Н1.1) ниже 7 процентов',
- 'Раздел_5' : 'Раздел 5. Число операционных дней в отчетном периоде'
- }
- dictionary_f157_text = {
- "Банковская_отчетность" : "Банковская отчетность",
- "Раздел_1" : "СВЕДЕНИЯ О КРУПНЫХ КРЕДИТОРАХ (ВКЛАДЧИКАХ) КРЕДИТНОЙ ОРГАНИЗАЦИИ"
- }
- dictionary_f118_text = {
- "Банковская_отчетность" : "Банковская отчетность",
- "Раздел_1" : "Раздел 1. Данные о концентрации кредитного риска по заемщикам и связанным лицам, не являющимся кредитными организациями",
- "Раздел_1.2" : "Раздел 1. Информация о нарушении норматива на внутримесячные даты по Разделу 1",
- "Раздел_1.3" : "Раздел 1. Информация о нарушении норматива контролируемыми участниками кредитных рисков, не включенных в Раздел 1",
- "Раздел_1.4" : "Раздел 1. Информация о нарушении норматива на внутримесячные даты участниками кредитных рисков, не включенных в Раздел 1" ,
- "Раздел_2" : "Раздел 2. Данные о концентрации кредитного риска по заемщикам (связанным лицам) - кредитным организациям",
- "Раздел_2.2" : "Раздел 2. Информация о нарушении норматива на внутримесячные даты по Разделу 2",
- "Раздел_2.3" : "Раздел 2. Информация о нарушении норматива контролируемыми участниками кредитных рисков, не включенных в Раздел 2",
- "Раздел_2.4" : "Раздел 2. Информация о нарушении норматива на внутримесячные даты участниками кредитных рисков, не включенных в Раздел 2",
- }
- dictionary_f123_text = {
- "Банковская_отчетность" : "Банковская отчетность",
- "Справочно" : "Справочно."
- }
- #dictionary = {'Раздел_1' : ['Код территории по ОКАТО', 'Код кредитной организации (филиала) по ОКПО', 'Код кредитной организации (филиала) Регистрационный номер (/порядковый номер)'],'Раздел_2' : ['Номер активов', 'Состав активов', 'Сумма требования', 'Категория Качества I', 'Категория Качества II']}
- #https://translated.turbopages.org/proxy_u/en-ru.ru.17e98ed5-6363a742-051efbb3-74722d776562/https/stackoverflow.com/questions/53365782/python-how-to-find-matching-one-or-multiply-words-in-a-sentence
- for key, value in dictionary_f115_text.items():
- for compare in set(test_mas):
- if dictionary_f115_text[key] in compare:
- if key not in total:
- total[key] = []
- for i in range(len(check)):
- check[i].columns = check[i].iloc[0]
- temp = check[i].drop(check[i].index[0])
- if i == list(dictionary_f115_text).index(key):
- total[key].append(temp)
- """for i in temp:
- for key,value in dictionary_2.items():
- for val in value:
- if key == val:
- print(key)"""
- #df = pd.concat([df, temp])
- form = bf.form
- for key, value in total.items():
- for key_1, value_1 in dictionary_f115_headers.items():
- if key == key_1:
- for df in total[key]:
- df.columns = dictionary_f115_headers[key]
- #df_total = pd.concat([df_total, df], axis = 1) for check new headers
- #df_total.to_excel("Test.xlsx") for check new headers in xlsx file
- """for i, df in enumerate(check):
- df.columns = [f"{form}_{i}_{j}" for j in range(len(df.columns))]"""
- # print(bf)
- # print(bf.date) # to show date
- # print(bf.form.color('blue')) # to show form
- # print(bf.license.color('green')) # to show license
- # print('How many tables? '.color('green_background'), len(bf))
- # print('Extract the last table '.color('yellow'), bf[-1])
- print("Let's convert to dataframe".color('blue_background'), bf.to_df())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement