Advertisement
Danila_lipatov

Task_new_headers

Nov 8th, 2022 (edited)
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 17.19 KB | None | 0 0
  1. def get_text(file: PathLike):
  2.     #regex = re.compile(r"([А-Яа-я]+\s*\d*\.*\s*\,*\s*)")#^([^+]*)^
  3.     #regex = re.compile(r"^[А-Яа-я] |(^[^+])([^ ]* .*)([^|^+^"
  4.      #                  r"$]$)")            #^(?![\n+|]).*$
  5.     #regex = re.compile(r"(^[^+]*^)\s*([^ ]* .*)([^|+\n]$)")      #^[^+]*^\s[^ ]* .*[^|+\n\
  6.     # +]$
  7.     temp = {}
  8.     get_full_space = []
  9.     get_full_without_space = []
  10.     regex = re.compile(r"^((?![\n+|]).)*$")
  11.     for i, line in enumerate(open(file)):
  12.         for match in re.finditer(regex, line):
  13.             print('Found on line %s: %s' % (i + 1, match.group().strip()))
  14.             if i + 1 not in temp:
  15.                 temp[i + 1] = []
  16.             temp[i + 1].append(match.group().strip())
  17.         for k2, k1 in zip(list(temp)[1:], temp):
  18.                 #get_full += temp[k2] + temp[k1]
  19.                 for x in temp[k1]:
  20.                     for y in temp[k2]:
  21.                         if k2 - k1 == 1:
  22.                             #get_full_space.append(x + y)
  23.                             get_full_without_space.append((x + ' ' + y).strip())
  24.         for x in temp[1]:
  25.             get_full_without_space.append(x)
  26.             #print(type(match.group()))
  27.         #s = inp.read().split()
  28.         #smath = re.findall(s,regex)
  29.             #print([i.replace(' ','') for i in inp.read().split('\n')])
  30.     return get_full_without_space
  31.  
  32. if __name__ == '__main__':
  33.     import parser
  34.  
  35.     """
  36.    Here you can see usages and some tests for form.
  37.    If there are everything works, you ain't no broken anything or build the right model.
  38.    """
  39.     total = {}
  40.     file = r"ur_file"
  41.     bf = BankForm(file)
  42.     check = bf.to_df()
  43.     temp = pd.DataFrame()
  44.     test_mas = get_text(file)
  45.     df = pd.DataFrame()
  46.     dictionary_f115_text = {
  47.         'Банковская отчетность': 'Банковская отчетность',
  48.  
  49.         'Раздел_1': 'Раздел 1. Информация о качестве активов, оцениваемых в целях создания резерва на возможные потери',
  50.  
  51.         'Раздел_2': 'Раздел 2. Информация по сгруппированным в портфели однородным требованиям и ссудам, предоставленным юридическим лицам',
  52.  
  53.         'Раздел_3': 'Раздел 3. Информация по сгруппированным в портфели однородным требованиям и ссудам, предоставленным физическим лицам',
  54.  
  55.         'Раздел_4': 'Раздел 4. Информация по элементам расчетной базы резервов на возможные потери, предусмотренным пунктом 2.7 Положения Банка России № 611-П',              #todo check this
  56.  
  57.         'Раздел_5': '4. Информация о ценных бумагах, учтенных на балансовых счетах, права на которые удостоверяются депозитариями',
  58.  
  59.         'Раздел_6': '5. Информация о справедливой стоимости ценных бумаг, изменение первоначальной стоимости которых отражается в бухгалтерском учете путем создания резервов на возможные потери',
  60.  
  61.         'Раздел_7': '6. Информация о финансовых активах, оцениваемых по справедливой стоимости',
  62.  
  63.         #'Раздел_Справочно': 'Раздел "Справочно:"',
  64.  
  65.     }
  66.     dictionary_f115_headers = {
  67.         'Банковская отчетность': ['Код территории по ОКАТО', 'Код кредитной организации (филиала) по ОКПО',
  68.                      'Код кредитной организации (филиала) Регистрационный номер (/порядковый номер)'],
  69.  
  70.         'Раздел_1': ['Номер строки', 'Состав активов', 'Сумма требования', 'Категория Качества I',
  71.                      'Категория Качества II', 'Категория Качества III', 'Категория Качества IV', 'Категория Качества V','Просроченная задолженность до 30 дней',
  72.                      'Просроченная задолженность от 31 до 90 дней', 'Просроченная  задолженность до 91 до 180 дней','Просроченная  задолженность свыше 180 дней',
  73.                      'Резерв на возможные потери расчетный', 'Резерв на возможные потери расчетный с учетом обеспечения', 'Резерв на возможные потери фактически сформированный итого',
  74.                      'Резерв на возможные потери фактически сформированный по категориям качества II', 'Резерв на возможные потери фактически сформированный по категориям качества III',
  75.                      'Резерв на возможные потери фактически сформированный по категориям качества IV', 'Резерв на возможные потери фактически сформированный по категориям качества V',
  76.                      'Корректировка резерва на возможные потери до оценочного резерва под ожидаемые кредитные убытки'],
  77.  
  78.         'Раздел_2': ['Номер строки', 'Наименование статьи', 'Сумма требований', 'Сформированный резерв на возможные потери',
  79.                       'Корректировка резерва на возможные потери до оценочного резерва под ожидаемые кредитные убытки'],
  80.  
  81.         'Раздел_3': ['Номер строки', 'Наименование статьи', 'Сумма требований', 'Сформированный резерв на возможные потери',
  82.                       'Корректировка резерва на возможные потери до оценочного резерва под ожидаемые кредитные убытки'],
  83.  
  84.         'Раздел_4': ['Номер строки', 'Наименование статьи', 'Сумма активов',
  85.                      'Сформированный резерв на возможные потери'],
  86.  
  87.         'Раздел_5': ['Номер строки', 'Наименование депозитария', 'ИНН депозитария',
  88.                      'Номер лицензии депозитория', 'Количество ценных бумаг шт.', 'Балансовая стоймость ценных бумаг, тыс. руб.',
  89.                       'Справедливая стоимость ценных бумаг, тыс. руб.',
  90.                       'Сформированный резерв на возможные потери тыс. руб. в соответствии с Положением № 177-П',
  91.                       'Сформированный резерв на возможные потери тыс. руб. в соответствии с Указанием № 8261-У',
  92.                       'Сформированный резерв на возможные потери тыс. руб. итого ( гр.3  + гр.5 )'],
  93.  
  94.         'Раздел_6': ['Номер строки', 'Состав активов', 'Сумма требований', 'Сформированный резерв на возможные потери',
  95.                      'Корректировка резерва на возможные потери до оценочного резерва под ожидаемые кредитные убытки',
  96.                      'Справедливая стоимость'],
  97.  
  98.         'Раздел_7': ['Номер строки', 'Наименование финансового актива', 'Сумма требования Балансовая стоимость',
  99.                      'Сумма требования Балансовая стоимость без учета корректировок итого',
  100.                      'Сумма требования Балансовая стоимость без учета корректировок по категориям качества I',
  101.                      'Сумма требования Балансовая стоимость без учета корректировок по категориям качества II',
  102.                      'Сумма требования Балансовая стоимость без учета корректировок по категориям качества III',
  103.                      'Сумма требования Балансовая стоимость без учета корректировок по категориям качества IV',
  104.                      'Сумма требования Балансовая стоимость без учета корректировок по категориям качества V',
  105.                      'Фактически сформированный резерв на возможные потери итого',
  106.                      'Фактически сформированный резерв на возможные потери по категориям качества II',
  107.                      'Фактически сформированный резерв на возможные потери по категориям качества III',
  108.                      'Фактически сформированный резерв на возможные потери по категориям качества IV',
  109.                      'Фактически сформированный резерв на возможные потери по категориям качества V'],
  110.  
  111.  
  112.         #'Раздел_Справочно': ['Номер строки', 'Наименование депозитария', 'ИНН депозитария',
  113.                      #'Номер лицензии депозитория', 'Количество ценных бумаг шт.',
  114.                     # 'Балансовая стоймость ценных бумаг, тыс. руб.',
  115.                     # 'Справедливая стоимость ценных бумаг', ]
  116.  
  117.  
  118.  
  119.     }
  120.  
  121.  
  122.  
  123.     dictionary_f135_text = {
  124.         'Банковская_отчетность' : 'Банковская отчетность',
  125.  
  126.         'Раздел_1': 'Раздел 1. Расшифровки отдельных балансовых счетов для расчета обязательных нормативов',
  127.  
  128.         'Раздел_2' : 'Раздел 2. Отдельные показатели деятельности кредитной организации, используемые для расчета обязательных нормативов, тыс. руб.',
  129.  
  130.         'Раздел_3' : 'Раздел 3. Значения обязательных нормативов',
  131.  
  132.         'Раздел_3a' : 'Раздел 3а. Информация по расчету обязательных нормативов',
  133.  
  134.         'Раздел_3б' : 'Раздел 3б. Переменные и корректировки для расчета обязательных нормативов',
  135.  
  136.         'Раздел_4' : 'Раздел 4. Информация о нарушении обязательных нормативов и (или) снижении значения норматива достаточности базового капитала банка (Н1.1) ниже 7 процентов',
  137.         'Раздел_5' : 'Раздел 5. Число операционных дней в отчетном периоде'
  138.  
  139.     }
  140.  
  141.     dictionary_f157_text = {
  142.         "Банковская_отчетность" : "Банковская отчетность",
  143.  
  144.         "Раздел_1" : "СВЕДЕНИЯ О КРУПНЫХ КРЕДИТОРАХ (ВКЛАДЧИКАХ) КРЕДИТНОЙ ОРГАНИЗАЦИИ"
  145.     }
  146.  
  147.     dictionary_f118_text = {
  148.         "Банковская_отчетность" : "Банковская отчетность",
  149.  
  150.         "Раздел_1" : "Раздел 1. Данные о концентрации кредитного риска по заемщикам и связанным лицам, не являющимся кредитными организациями",
  151.  
  152.         "Раздел_1.2" : "Раздел 1. Информация о нарушении норматива на внутримесячные даты по Разделу 1",
  153.        
  154.         "Раздел_1.3" : "Раздел 1. Информация о нарушении норматива контролируемыми участниками кредитных рисков, не включенных в Раздел 1",
  155.  
  156.         "Раздел_1.4" : "Раздел 1. Информация о нарушении норматива на внутримесячные даты участниками кредитных рисков, не включенных в Раздел 1" ,
  157.  
  158.         "Раздел_2" : "Раздел 2. Данные о концентрации кредитного риска по заемщикам (связанным лицам) - кредитным организациям",
  159.  
  160.         "Раздел_2.2" : "Раздел 2. Информация о нарушении норматива на внутримесячные даты по Разделу 2",
  161.  
  162.         "Раздел_2.3"  : "Раздел 2. Информация о нарушении норматива контролируемыми участниками кредитных рисков, не включенных в Раздел 2",
  163.  
  164.         "Раздел_2.4" : "Раздел 2. Информация о нарушении норматива на внутримесячные даты участниками кредитных рисков, не включенных в Раздел 2",
  165.     }
  166.  
  167.     dictionary_f123_text = {
  168.         "Банковская_отчетность" : "Банковская отчетность",
  169.  
  170.         "Справочно" : "Справочно."
  171.  
  172.  
  173.     }
  174.  
  175.  
  176.  
  177.     #dictionary = {'Раздел_1' : ['Код территории по ОКАТО', 'Код кредитной организации (филиала) по ОКПО', 'Код кредитной организации (филиала) Регистрационный номер (/порядковый номер)'],'Раздел_2' : ['Номер активов', 'Состав активов', 'Сумма требования', 'Категория Качества I', 'Категория Качества II']}
  178.     #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
  179.  
  180.     for key, value in dictionary_f115_text.items():
  181.             for compare in set(test_mas):
  182.                 if dictionary_f115_text[key] in compare:
  183.                     if key not in total:
  184.                         total[key] = []
  185.                         for i in range(len(check)):
  186.                             check[i].columns = check[i].iloc[0]
  187.                             temp = check[i].drop(check[i].index[0])
  188.                             if i == list(dictionary_f115_text).index(key):
  189.                                 total[key].append(temp)
  190.                     """for i in temp:
  191.                        for key,value in dictionary_2.items():
  192.                            for val in value:
  193.                                if key == val:
  194.                                    print(key)"""
  195.                         #df = pd.concat([df, temp])
  196.     form = bf.form
  197.  
  198.     for key, value in total.items():
  199.         for key_1, value_1 in dictionary_f115_headers.items():
  200.             if key == key_1:
  201.                 for df in total[key]:
  202.                     df.columns = dictionary_f115_headers[key]
  203.                     #df_total = pd.concat([df_total, df], axis = 1)     for check new headers
  204.  
  205.    
  206.     #df_total.to_excel("Test.xlsx")         for check new headers in xlsx file
  207.     """for i, df in enumerate(check):
  208.        df.columns = [f"{form}_{i}_{j}" for j in range(len(df.columns))]"""
  209.     # print(bf)
  210.     # print(bf.date)  # to show date
  211.     # print(bf.form.color('blue'))  # to show form
  212.     # print(bf.license.color('green'))  # to show license
  213.     # print('How many tables? '.color('green_background'), len(bf))
  214.     # print('Extract the last table '.color('yellow'), bf[-1])
  215.     print("Let's convert to dataframe".color('blue_background'), bf.to_df())
  216.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement