Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import csv, os, re
- from var_dump import var_dump
- from typing import Dict, List, Tuple
- EMPTY_FILE_STRING = 'Пустой файл'
- class DataSet:
- def __init__(self, file_name: str):
- self.file_name = file_name
- self.vacancies_objects = [Vacancy(vacancy) for vacancy in self.csv_filer(*self.csv_reader(file_name))]
- @staticmethod
- def clean_string(html_tags: str) -> str:
- cleaned_string = re.sub('<.*?>', '', html_tags)
- return cleaned_string if '\n' in html_tags else ' '.join(cleaned_string.split())
- @staticmethod
- def csv_reader(file_name: str) -> Tuple[List[str], List[List[str]]]:
- reader = csv.reader(open(file_name, encoding='utf_8_sig'))
- all_date = [line for line in reader]
- return all_date[0], all_date[1:]
- def csv_filer(self, headlines: List[str], reader: List[List[str]]) -> List[Dict[str, str]]:
- updated_vacancies_list = list(filter(lambda vacancy: (
- len(vacancy) == len(headlines) and
- vacancy.count('') == 0), reader))
- return [dict(zip(headlines, map(self.clean_string, vacancy))) for vacancy in updated_vacancies_list]
- class Vacancy:
- def __init__(self, vacancies_list: Dict[str, str]):
- self.name = vacancies_list['name']
- self.description = vacancies_list['description']
- self.key_skills = vacancies_list['key_skills'].split('\n')
- self.experience_id = vacancies_list['experience_id']
- self.premium = vacancies_list['premium']
- self.employer_name = vacancies_list['employer_name']
- self.salary = Salary(salary_from=vacancies_list['salary_from'],
- salary_to=vacancies_list['salary_to'],
- salary_gross=vacancies_list['salary_gross'],
- salary_currency=vacancies_list['salary_currency'])
- self.area_name = vacancies_list['area_name']
- self.published_at = vacancies_list['published_at']
- class Salary:
- def __init__(self, salary_from: str, salary_to: str, salary_gross: str, salary_currency: str):
- self.salary_from = salary_from
- self.salary_to = salary_to
- self.salary_gross = salary_gross
- self.salary_currency = salary_currency
- def exit_file(received_message: str) -> None:
- print(received_message)
- exit()
- csv_name = input('Введите название файла: ')
- order_option = input('Введите параметр фильтрации: ')
- sort_option = input('Введите параметр сортировки: ')
- is_reversed = input('Обратный порядок сортировки (Да / Нет): ')
- interval = list(map(int, input('Введите диапазон вывода: ').split()))
- needed_columns = input('Введите требуемые столбцы: ')
- if os.stat(csv_name).st_size == 0:
- exit_file(EMPTY_FILE_STRING)
- var_dump(DataSet(file_name=csv_name))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement