Обновления сентября 2025

This commit is contained in:
2025-10-08 10:24:08 +04:00
parent 4ef3e1d25f
commit 5022309848
7 changed files with 607 additions and 562 deletions
+74 -74
View File
@@ -1,75 +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 input_string
if __name__ == "__main__":
# print(test_short("кузнецов в.н.", "Кузнецов Владимир Николаевич"))
s = " 10.02, 24.02, 10.03 Абдусалямова Л.И . 27.01, 07.04 Голубцова Т.С. 24.03 Шаршова С.М. "
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"))