From 057a65d15e263b8e310e37080a86037717ad658e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Sierro?= Date: Wed, 9 Aug 2023 13:54:48 +0200 Subject: [PATCH] added logical_sort_key to sort files --- src/scgenerator/io.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/scgenerator/io.py b/src/scgenerator/io.py index 6bc790d..bdb2f86 100644 --- a/src/scgenerator/io.py +++ b/src/scgenerator/io.py @@ -4,6 +4,7 @@ import datetime import importlib import json import os +import re from dataclasses import dataclass from pathlib import Path from typing import BinaryIO, Protocol, Sequence @@ -327,3 +328,19 @@ def get_symb(right: bool, rel_i, abs_j, line_pos, max_ind): return "╮╭"[right] else: raise ValueError("top of left columns cannot be below line") + + +def _to_num(s: str) -> str | float | int: + for f in int, float: + try: + return f(s) + except ValueError: + pass + return s + + +NUM_REGEX = r"[+-]?[\d]+(?:\.?[\d]+)?(?:[eE][+-]?\d+)?" + + +def logical_sort_key(s: os.PathLike | str) -> tuple: + return tuple(_to_num(el) for el in re.split(f"({NUM_REGEX})", str(s)) if el)