/
megaokna43
/
courses_4
Обзор
Документация
Войти
/
megaokna43
/
courses_4
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/utils.py
100 строк
7 KB
megaokna43
небольшие изменения в тексте
13 дек 2024, 13:43
13 дек 2024, 13:43
d3d96a8
Код
Авторство
О чём код?
from src.parser import HH from src.vacancy import (Vacancy) from src.json_worker import JSON_Worker def filter_city(vacancies_instances, city): """Эта функция фильтрует список вакансий по городу. Она принимает список экземпляров Vacancy и название города, а затем возвращает новый список, содержащий только вакансии, соответствующие указанному городу.""" filtered_city = [] for vacancy in vacancies_instances: if vacancy.city == city: filtered_city.append(vacancy) return filtered_city def filter_for_description(vacancies_instances, keyword): """Эта функция фильтрует список вакансий по кодовому слову. Она принимает список экземпляров Vacancy и искомое слово, а затем возвращает новый список, содержащий только вакансии по указанному слову в описании.""" filtered_list = [] for vacancy in vacancies_instances: if keyword in vacancy.description: filtered_list.append(vacancy) return filtered_list def filter_for_salary(vacancies_instances, salary): """Эта функция фильтрует список вакансий по минимальной зарплате. Она принимает список экземпляров Vacancy и минимальный уровень зарплаты, а затем возвращает новый список, содержащий только вакансии, в которых минимальная зарплата больше или равна заданной.""" filtered_list = [] for vacancy in vacancies_instances: if salary <= vacancy.salary_from: filtered_list.append(vacancy) return filtered_list def get_top_vacancies(vacancies_instances, n): """ Эта функция возвращает топ-N вакансий по зарплате. Она принимает список экземпляров Vacancy и количество вакансий для вывода, сортирует список по убыванию зарплаты и возвращает первые N вакансий""" sorted_vacancies = sorted(vacancies_instances, key=lambda x: x.salary_from, reverse=True) return sorted_vacancies[:n] def user_interaction(): """Данная функция реализует взаимодействие с пользователем. Она запрашивает ключевое слово для поиска вакансий, создает экземпляр класса HH для загрузки вакансий, преобразует загруженные данные в список экземпляров Vacancy и сохраняет этот список в файл JSON. Затем она предлагает пользователю выбрать способ фильтрации вакансий (по городу, по ключевому слову, по минимальной зарплате или вывод топ-N вакансий) и вызывает соответствующие функции фильтрации. Наконец, она выводит отфильтрованные вакансии.""" keyword = input("Введите ключевое слово для поиска вакансий: ") # Ввод запроса профессии hh = HH() # Создание экземпляра класса HH для загрузки вакансий vacancies = hh.load_vacancies(keyword) # Загрузка вакансий по запросу vacancies_list = Vacancy.cast_to_object_list(vacancies) # Преобразуем загруженные данные в атрибуты класса Vacancy print(f"Найдено вакансий {len(vacancies_list)}") # Печатаем количество найденных вакансий json_saver = JSON_Worker("data/export.json") # Сохранение списка вакансий в JSON файл json_saver.save_vacancy(vacancies_list) json_saver.delete_vacancy(vacancies_list) fit_back = input("Требуется определенная выборка для вывода, или все данные из файла? \n" # Меню пользователя "1 - по городу \n" "2 - по ключевому слову в описании\n" "3 - зарплата от \n" "4 - по количеству топ вакансий \n" "5 - все \n") if fit_back.lower() == '1': # Ввод названия города для фильтрации words_city = input("Введите название города для определения выборки: ") vacancies_list = filter_city(vacancies_list, words_city) # Вызов функции filter_city для фильтрации по городу print("Отфильтрованные вакансии по городу: ") # Печатаем найденные по городу вакансии elif fit_back.lower() == '2': # Ввод ключевого слова для фильтрации keyword = input("Введите ключевое слово для определения выборки: ") vacancies_list = filter_for_description(vacancies_list, keyword) # Вызов функции filter_for_description для фильтрации по ключевому слову print("Отфильтрованные вакансии по ключевому слову: ") # Печатаем найденные по ключевому слову вакансии. elif fit_back.lower() == '3': # Ввод минимальной суммы для выборки. salary_from = int(input("Введите минимальную зарплату: ")) # Вызов функции filter_for_salary для фильтрации по заработной плате. vacancies_list = filter_for_salary(vacancies_list, salary_from) # Сортируем вакансии по зарплате. print("Отфильтрованные вакансии по зарплате: ") # Печатаем найденные по уровню заработной платы. elif fit_back.lower() == '4': # Ввод количества топ вакансий top_n = int(input("Введите количество вакансий для вывода в топ N: ")) vacancies_list = get_top_vacancies(vacancies_list, top_n) # Выделяем N вакансий по зарплате. print(f"Найдены ТОП-{top_n} вакансии. ") # Печатаем найденные N вакансий. elif fit_back.lower() == "5": print("Все вакансии: ") # Печатаем все вакансии. if vacancies_list: for vacancy in vacancies_list: print(vacancy) # Вывод списка вакансий. else: print(f"Вакансии не найдены. ") # Вывод сообщения если вакансии не найдены.