Advertisement
mikhailemv

Untitled

Oct 19th, 2022
731
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.97 KB | None | 0 0
  1. import csv
  2. import re
  3. import os
  4. from prettytable import PrettyTable, ALL
  5.  
  6. dic_naming = {  'name': 'Название',
  7.                 'description': 'Описание',
  8.                 'key_skills': 'Навыки',
  9.                 'experience_id': 'Опыт работы',
  10.                 'premium': 'Премиум-вакансия',
  11.                 'employer_name': 'Компания',
  12.                 'salary_from': 'Нижняя граница вилки оклада',
  13.                 'salary_to': 'Верхняя граница вилки оклада',
  14.                 'salary_gross': 'Оклад указан до вычета налогов',
  15.                 'salary_currency': 'Идентификатор валюты оклада',
  16.                 'area_name': 'Название региона',
  17.                 'published_at': 'Дата публикации вакансии',
  18.                 'salary': 'Оклад'}
  19.  
  20. dic_currency = {"AZN": "Манаты",
  21.                 "BYR": "Белорусские рубли",
  22.                 "EUR": "Евро",
  23.                 "GEL": "Грузинский лари",
  24.                 "KGS": "Киргизский сом",
  25.                 "KZT": "Тенге",
  26.                 "RUR": "Рубли",
  27.                 "UAH": "Гривны",
  28.                 "USD": "Доллары",
  29.                 "UZS": "Узбекский сум"}
  30.  
  31. dic_words = {   "noExperience": "Нет опыта",
  32.                 "between1And3": "От 1 года до 3 лет",
  33.                 "between3And6": "От 3 до 6 лет",
  34.                 "moreThan6": "Более 6 лет"}
  35.  
  36. dic_gross = {   "True": "Без вычета налогов",
  37.                 "False": "С вычетом налогов"}
  38.  
  39. dic_bool = {"False": "Нет", "True": "Да",}
  40.  
  41. dic_moneyWord = ["salary_from", "salary_to", "salary_gross", "salary_currency"]
  42.  
  43.  
  44. def check (file_name):
  45.     return os.stat(file_name).st_size == 0
  46.  
  47. def csv_reader(file_name):
  48.  
  49.     rows, reader = [], []
  50.  
  51.     with open(file_name, encoding='utf-8-sig') as r_file:
  52.         file_reader = csv.reader(r_file, delimiter=",")
  53.         count = 0
  54.         for row in file_reader:
  55.             if count == 0:
  56.                 reader.append(row)
  57.             else:
  58.                 rows.append(row)
  59.             count += 1
  60.  
  61.     reader.append(rows)
  62.     return reader
  63.  
  64. def scv_filer(reader, list_naming):
  65.     dicts = []
  66.     for row in reader:
  67.         if ((len(row) == len(list_naming)) & (not ((None in row) | ("" in row)))):
  68.             for e in range(0, len(row), 1):
  69.                 row[e] = re.sub(re.compile('<.*?>'), '', row[e])
  70.                 # row[e] = row[e].replace('\n', ', ')
  71.                 # row[e] = row[e].replace('\r\n', ', ')
  72.                 if not e == 2:
  73.                     row[e] = ' '.join(row[e].split())
  74.             dicts.append({k: v for k, v in zip(list_naming, row)})
  75.  
  76.     return dicts
  77.  
  78. def reNumber(number: str):
  79.  
  80.     result: str = ''
  81.     z = number.split(".")[0][::-1]
  82.     count = len(z)//3*3
  83.  
  84.     for i in range(0, count, 3):
  85.         result += " " + z[i:i+3]
  86.  
  87.     if not(len(z) % 3 == 0):
  88.         result = result + " " + z[-(len(z) - count):]
  89.  
  90.     return result[::-1][:len(result) - 1]
  91.  
  92. def formater(row):
  93.  
  94.     for element in row:
  95.         if len(row[element]) >= 100:
  96.             row[element] = row[element][:100] + "..."
  97.  
  98.  
  99.     format_dict = {}
  100.  
  101.     cash = f'{reNumber(row["salary_from"])} - {reNumber(row["salary_to"])} ({dic_currency[row["salary_currency"]]}) ({dic_gross[row["salary_gross"]]})'
  102.  
  103.     row["salary_gross"] = dic_bool[row["salary_gross"]]
  104.     row["premium"] = dic_bool[row["premium"]]
  105.  
  106.     list_time = row['published_at'].split('-')
  107.     list_time[2] = list_time[2][0] + list_time[2][1]
  108.     row['published_at'] = f'{list_time[2]}.{list_time[1]}.{list_time[0]}'
  109.  
  110.     row['experience_id'] = dic_words[row['experience_id']]
  111.  
  112.     for title in row:
  113.         if title == "salary_from":
  114.             format_dict["salary"] = cash
  115.         if title in dic_moneyWord:
  116.             continue
  117.         format_dict[title] = row[title]
  118.  
  119.     return format_dict
  120.  
  121. def parserData(number_row_inp, count):
  122.     if len(number_row_inp) == 0:
  123.         return [1, count + 1]
  124.     result = number_row_inp.split()
  125.     if len(result) < 2:
  126.         result.append(count + 1)
  127.     for e in range(0, len(result), 1):
  128.         result[e] = int(result[e])
  129.     return result
  130.  
  131. def parserTitles(titles_table_inp):
  132.     if len(titles_table_inp) == 0:
  133.         return []
  134.     result = titles_table_inp.split(", ")
  135.     result.insert(0, "№")
  136.     return result
  137.  
  138.  
  139.  
  140. def print_vacancies(data_vacancies, dic_naming, numbers_row, titles_table):
  141.     newDicts=[]
  142.     for dict in data_vacancies:
  143.             newDicts.append(formater(dict))
  144.  
  145.  
  146.     list_naming = []
  147.     if not len(newDicts) == 0:
  148.  
  149.         for title in newDicts[0].keys():
  150.                 list_naming.append(dic_naming[title])
  151.         list_naming.insert(0, "№")
  152.  
  153.         newTable = PrettyTable(list_naming)
  154.  
  155.         for title in list_naming:
  156.                 newTable._max_width[title] = 20
  157.         newTable.hrules = ALL
  158.         newTable.align = "l"
  159.  
  160.  
  161.         counter = 1
  162.         for dict in newDicts:
  163.             row = list(dict.values())
  164.             row.insert(0, counter)
  165.             newTable.add_row(row)
  166.             counter += 1
  167.  
  168.         if len(titles_table) == 0:
  169.             print(newTable.get_string(start=numbers_row[0] - 1, end=numbers_row[1] - 1))
  170.         else:
  171.             print(newTable.get_string(start=numbers_row[0] - 1, end=numbers_row[1] - 1, fields=titles_table))
  172.  
  173.  
  174.     else: print("Нет данных")
  175.  
  176.  
  177.  
  178. file_name = input()
  179. numbers_row_inp = input()
  180. titles_table_inp = input()
  181.  
  182.  
  183.  
  184.  
  185. if not check(file_name):
  186.     reader = csv_reader(file_name)
  187.     dicts = scv_filer(reader[1], reader[0])
  188.     titles_table = parserTitles(titles_table_inp)
  189.     numbers_row = parserData(numbers_row_inp, len(dicts))
  190.     print_vacancies(dicts, dic_naming, numbers_row, titles_table)
  191. else: print("Пустой файл")
  192.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement