Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- natsort with files which follows the pattern file_nn.xxx or file_nn (no extension)
- where nn is an integer and xxx the extension.
- The files are sorted by: name, extension, value
- """
- from __future__ import annotations
- from pathlib import Path
- from typing import Iterable, TypeVar
- T = TypeVar("T", str, Path)
- def natsort(iterable: Iterable[T], reverse=False) -> list[T]:
- """
- Sort the files by name, extension, integer
- """
- def keyfunc(path: str | Path) -> tuple[str, str, int]:
- """
- Keyfunc takes a str or a path object and
- returns (name: str, suffix: str, value: int)
- """
- path = Path(path)
- try:
- name, number = path.stem.split("_")
- except ValueError:
- return path.name, path.suffix, -1
- return name, path.suffix, int(number)
- return sorted(iterable, key=keyfunc, reverse=reverse)
- ns = natsort(["file1.txt", "file_2.txt", "file_3.txt"])
- print(ns)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement