added logical_sort_key to sort files

This commit is contained in:
Benoît Sierro
2023-08-09 13:54:48 +02:00
parent 54cfb48a36
commit 057a65d15e

View File

@@ -4,6 +4,7 @@ import datetime
import importlib import importlib
import json import json
import os import os
import re
from dataclasses import dataclass from dataclasses import dataclass
from pathlib import Path from pathlib import Path
from typing import BinaryIO, Protocol, Sequence 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] return "╮╭"[right]
else: else:
raise ValueError("top of left columns cannot be below line") 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)