init
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
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 None
|
||||
|
||||
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"))
|
||||
Reference in New Issue
Block a user