Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import csv
- import re
- import os
- from prettytable import PrettyTable, ALL
- dic_naming = { 'name': 'Название',
- 'description': 'Описание',
- 'key_skills': 'Навыки',
- 'experience_id': 'Опыт работы',
- 'premium': 'Премиум-вакансия',
- 'employer_name': 'Компания',
- 'salary_from': 'Нижняя граница вилки оклада',
- 'salary_to': 'Верхняя граница вилки оклада',
- 'salary_gross': 'Оклад указан до вычета налогов',
- 'salary_currency': 'Идентификатор валюты оклада',
- 'area_name': 'Название региона',
- 'published_at': 'Дата публикации вакансии',
- 'salary': 'Оклад'}
- dic_currency = {"AZN": "Манаты",
- "BYR": "Белорусские рубли",
- "EUR": "Евро",
- "GEL": "Грузинский лари",
- "KGS": "Киргизский сом",
- "KZT": "Тенге",
- "RUR": "Рубли",
- "UAH": "Гривны",
- "USD": "Доллары",
- "UZS": "Узбекский сум"}
- dic_words = { "noExperience": "Нет опыта",
- "between1And3": "От 1 года до 3 лет",
- "between3And6": "От 3 до 6 лет",
- "moreThan6": "Более 6 лет"}
- dic_gross = { "True": "Без вычета налогов",
- "False": "С вычетом налогов"}
- dic_bool = {"False": "Нет", "True": "Да",}
- dic_moneyWord = ["salary_from", "salary_to", "salary_gross", "salary_currency"]
- def check (file_name):
- return os.stat(file_name).st_size == 0
- def csv_reader(file_name):
- rows, reader = [], []
- with open(file_name, encoding='utf-8-sig') as r_file:
- file_reader = csv.reader(r_file, delimiter=",")
- count = 0
- for row in file_reader:
- if count == 0:
- reader.append(row)
- else:
- rows.append(row)
- count += 1
- reader.append(rows)
- return reader
- def scv_filer(reader, list_naming):
- dicts = []
- for row in reader:
- if ((len(row) == len(list_naming)) & (not ((None in row) | ("" in row)))):
- for e in range(0, len(row), 1):
- row[e] = re.sub(re.compile('<.*?>'), '', row[e])
- # row[e] = row[e].replace('\n', ', ')
- # row[e] = row[e].replace('\r\n', ', ')
- if not e == 2:
- row[e] = ' '.join(row[e].split())
- dicts.append({k: v for k, v in zip(list_naming, row)})
- return dicts
- def reNumber(number: str):
- result: str = ''
- z = number.split(".")[0][::-1]
- count = len(z)//3*3
- for i in range(0, count, 3):
- result += " " + z[i:i+3]
- if not(len(z) % 3 == 0):
- result = result + " " + z[-(len(z) - count):]
- return result[::-1][:len(result) - 1]
- def formater(row):
- for element in row:
- if len(row[element]) >= 100:
- row[element] = row[element][:100] + "..."
- format_dict = {}
- cash = f'{reNumber(row["salary_from"])} - {reNumber(row["salary_to"])} ({dic_currency[row["salary_currency"]]}) ({dic_gross[row["salary_gross"]]})'
- row["salary_gross"] = dic_bool[row["salary_gross"]]
- row["premium"] = dic_bool[row["premium"]]
- list_time = row['published_at'].split('-')
- list_time[2] = list_time[2][0] + list_time[2][1]
- row['published_at'] = f'{list_time[2]}.{list_time[1]}.{list_time[0]}'
- row['experience_id'] = dic_words[row['experience_id']]
- for title in row:
- if title == "salary_from":
- format_dict["salary"] = cash
- if title in dic_moneyWord:
- continue
- format_dict[title] = row[title]
- return format_dict
- def parserData(number_row_inp, count):
- if len(number_row_inp) == 0:
- return [1, count + 1]
- result = number_row_inp.split()
- if len(result) < 2:
- result.append(count + 1)
- for e in range(0, len(result), 1):
- result[e] = int(result[e])
- return result
- def parserTitles(titles_table_inp):
- if len(titles_table_inp) == 0:
- return []
- result = titles_table_inp.split(", ")
- result.insert(0, "№")
- return result
- def print_vacancies(data_vacancies, dic_naming, numbers_row, titles_table):
- newDicts=[]
- for dict in data_vacancies:
- newDicts.append(formater(dict))
- list_naming = []
- if not len(newDicts) == 0:
- for title in newDicts[0].keys():
- list_naming.append(dic_naming[title])
- list_naming.insert(0, "№")
- newTable = PrettyTable(list_naming)
- for title in list_naming:
- newTable._max_width[title] = 20
- newTable.hrules = ALL
- newTable.align = "l"
- counter = 1
- for dict in newDicts:
- row = list(dict.values())
- row.insert(0, counter)
- newTable.add_row(row)
- counter += 1
- if len(titles_table) == 0:
- print(newTable.get_string(start=numbers_row[0] - 1, end=numbers_row[1] - 1))
- else:
- print(newTable.get_string(start=numbers_row[0] - 1, end=numbers_row[1] - 1, fields=titles_table))
- else: print("Нет данных")
- file_name = input()
- numbers_row_inp = input()
- titles_table_inp = input()
- if not check(file_name):
- reader = csv_reader(file_name)
- dicts = scv_filer(reader[1], reader[0])
- titles_table = parserTitles(titles_table_inp)
- numbers_row = parserData(numbers_row_inp, len(dicts))
- print_vacancies(dicts, dic_naming, numbers_row, titles_table)
- else: print("Пустой файл")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement