Files
ktalk-scheduler/util.py
T

75 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import re
from functools import lru_cache
@lru_cache(None)
def partialize(s):
s = s.lower().replace("ё", "е")
p = re.split("[. ]+", s)
return list(filter(lambda a: a, p))
def test_short(short: str, full: str) -> bool:
short_parts = partialize(short)
full_parts = partialize(full)
for i in range(min(len(short_parts), len(full_parts))):
if not full_parts[i].startswith(short_parts[i]):
return False
return True
def find_in_list(short, full_list):
result = []
for item in full_list:
if test_short(short, item):
result.append(item)
if len(result) == 1:
return result[0]
elif short in result:
return short
else:
return result
def find_teacher_by_date(input_string, target_date):
"""
Ищет преподавателя по целевой дате в строке с датами и ФИО.
:param input_string: Строка с датами и ФИО преподавателей.
:param target_date: Целевая дата в формате "%d.%m".
:return: ФИО преподавателя, связанного с целевой датой, или None, если дата не найдена.
"""
# Преобразуем целевую дату в формат "%d.%m"
target_date_str = target_date#.strftime("%d.%m")
# Регулярное выражение для поиска дат в формате "%d.%m"
date_pattern = re.compile(r"\d{2}\.\d{2}")
# Разделяем строку на строки по переносам
lines = re.split(" {5,}", input_string)
# Проходим по каждой строке
for line in lines:
# Разделяем строку на даты и ФИО
parts = line.strip().split()
# Извлекаем даты и ФИО
dates = []
teacher = ""
for part in parts:
if date_pattern.fullmatch(part.replace(",", "")): # Убираем запятые, если они есть
dates.append(part.replace(",", "")) # Убираем запятые, если они есть
else:
teacher += part + " " # Собираем ФИО
# Проверяем, есть ли целевая дата в списке дат
if target_date_str in dates:
return teacher.strip() # Возвращаем ФИО преподавателя
# Если дата не найдена
return input_string
if __name__ == "__main__":
# print(test_short("кузнецов в.н.", "Кузнецов Владимир Николаевич"))
s = " 10.02, 24.02, 10.03 Абдусалямова Л.И . 27.01, 07.04 Голубцова Т.С. 24.03 Шаршова С.М. "
print(find_teacher_by_date(s, "10.03"))