from pathlib import Path from attr import dataclass @dataclass class RfFolder: parent: Path D: str L: int = 30 C: str = 'PAR' @staticmethod def from_path(p: Path | str) -> 'RfFolder': p = Path(p) D, L, C = p.name.split(',') L = int(L.replace('L=', '')) C = C.replace('C=', '') return RfFolder(p.parent, D, L, C) @property def name(self): return f'{self.D},L={self.L},C={self.C}' @property def path(self): return self.parent / self.name @property def all(self): return [RfFile.from_path(f) for f in self.path.glob('*.bin')] @dataclass class RfFile: folder: RfFolder X: int = None Y: int = None Z: int = None S: int = None E: int = None @staticmethod def from_path(p: Path | str) -> 'RfFile': p = Path(p) folder = RfFolder.from_path(p.parent) return RfFile(folder, **{(c := pair.split('='))[0]: int(c[1]) for pair in p.stem.split(',')}) @property def path(self): arr = [] d = self.__dict__.copy() # print(d) d.__delitem__('folder') for k in d: if d[k] is not None: arr.append(f'{k}={d[k]}') filename = ','.join(arr) + '.bin' # print(filename) return self.folder.path / filename def test2(): r = RfFile.from_path('/run/media/lambda/b86dccdc-f134-464b-a310-6575ee9ae85c/cap4/TEST1,L=30,C=PAR/S=925,E=4.bin') print(r) if __name__ == '__main__': test2()