import os import re from shapely.geometry import Polygon from algam_pars_mif import UnpackingMif class MifData: def __init__(self,directory,name,cad_number,additional_info,square): self.directory:str=directory self.name:str=name self.cad_number:str=cad_number self.additional_info:str=additional_info self.square:float=square class ReadMifDirectory(): def __init__(self): pass def find_mif_files(self,directory:str): mif_files = [] for root, dirs, files in os.walk(directory): for file in files: if file.lower().endswith('.mif'): # Ищем последовательность чисел, разделённых чем угодно, в начале имени файла cad_match = re.search(r'(\d{2,}([_\W]+)?)+\d{2,}', file) if cad_match: # Извлекаем только цифры из найденной последовательности numbers = re.findall(r'\d+', cad_match.group()) cad_number = ':'.join(numbers) # Всё, что после кадастрового номера — это аббревиатуры и прочее additional_info = file[cad_match.end():] # Удаляем расширение additional_info = re.sub(r'\.[^.]+$', '', additional_info) # Чистим пробелы и спецсимволы additional_info = re.sub(r'\s+', '_', additional_info) additional_info = re.sub(r'^[^\wа-яА-ЯёЁ]*', '', additional_info) additional_info = re.sub(r'[^\wа-яА-ЯёЁ_]', '', additional_info) additional_info = re.sub(r'_+', '_', additional_info).strip('_') else: cad_number = "" additional_info = re.sub(r'\.[^.]+$', '', file) additional_info = re.sub(r'\s+', '_', additional_info) additional_info = re.sub(r'^[^\wа-яА-ЯёЁ]*', '', additional_info) additional_info = re.sub(r'[^\wа-яА-ЯёЁ_]', '', additional_info) additional_info = re.sub(r'_+', '_', additional_info).strip('_') mif_files.append(MifData( directory=os.path.join(root, file), name=os.path.basename(file), cad_number=cad_number, additional_info=additional_info, square=UnpackingMif(file_directory=os.path.join(root, file)) )) if mif_files: print(f"{mif_files[0].directory=}/{mif_files[0].name=}/{mif_files[0].cad_number=}/{mif_files[0].additional_info=}/{mif_files[0].square=}") return mif_files