Rozdział 23 · Część IV · Wdrażamy SafeSort
pathlib: pracujemy ze ścieżkami i katalogami
Path opisuje ścieżkę obiektu wraz z jego operacjami. Służy do budowy modelu danych SafeSort.
SafeSort · Część 4 z 6
Git i GitHub→Planowanie→Projekt→Wdrożenie→Testy i CI→Premiera
Wszystko, co SafeSort robi z plikami, zaczyna się od ścieżek. Moduł
pathlib ze standardowej biblioteki opisuje ścieżkę nie jako łańcuch znaków, lecz jako
Cel Path własnymi operacjami.
| String | Path |
|---|---|
| "/home/anna/Downloads/report.pdf" | Path("/home/anna/Downloads/report.pdf") |
| ręczne przeszukiwanie . split('/') | gotowe atrybuty fajl.parent, fajl.name, fajl.suffix, fajl.stem |
| łączenie łańcuch znaków w celu połączenia ścieżek | operator / tworzy ścieżkę: koren / 'report.pdf' |
pathlib_osnovy.py
from pathlib import Path
koren = Path("~/Downloads").expanduser()
fajl = koren / "otchet.pdf"
Operator / dla torów
Klasa
Path operator zostaje nadpisany /: nie dzieli liczb, lecz skleja część ścieżki nową nazwą, automatycznie podstawiając właściwy separator dla obecnego systemu operacyjnego. Zbieraj ścieżki przez konkatenację łańcuchów (koren + "/" + "otchet.pdf") nie jest potrzebne.SafeSort: FileInfo Model danych
Skaner SafeSort nie ogranicza się do listy ścieżek. Opisuje każdy znaleziony plik Mały obiekt niezmienny:
src/safesort/models.py
@dataclass(frozen=True)
class FileInfo:
path: Path
size: int
extension: str
frozen=True zabrania przypisywania pól już utworzonych
FileInfo. Ta nieruchomość obiektu-wartości, a nie ochronę systemu plików. Funkcja może otrzymywać obiekt frozen i nadal zapisywać pliki, uzyskiwać dostęp do sieci lub wykonywać inne skutki uboczne.
Dane niezmienne nie oznaczają czystej funkcji
build_plan() nie zmienia dysku według osobnego kontraktu: API zwraca plan, implementacja nie wywołuje move/write, a test sprawdza brak zmian. frozen=True tylko nie pozwala przekazać pól modelu. To różne granice i obie są potrzebne.Praktyka: operacje z Path
Interaktywny Laptop w przeglądarce: Python 3.14 przez Pyodide, bez instalacji