Rozdział 23 · Część IV · Wdrażamy SafeSort

Zdefiniuj kategorię pliku

Klasyfikacja z definicji jest praktyczną heurystyką, a nie dowodem na to, co naprawdę znajduje się w pliku.

SafeSort · Część 4 z 6Wdrożenie
GitHubIssue #2 · Project SafeSort Pierwsze wydanie
Add file classification
Area: FilesystemPriority: High
git switch -c feat/classifier

Każdemu znalezionemu plikowi trzeba przypisać kategorię — dokumenty, obrazy, wideo i tak dalej. SafeSort określa kategorię według rozszerzenia pliku: prosta i przewidywalna zasada, która obejmuje większość praktycznych przypadków.

System plikówkatalog z plikamiScannerscan()Klasyfikatorclassify()
Do łańcucha dodaje się nowe ogniwo — klasyfikator.
PlikKategoria
report.pdfdocuments
photo.jpgimages
backup.ziparchives
unknown.xyzother
src/safesort/config.py
DEFAULT_EXTENSIONS: dict[str, list[str]] = {
    "documents": [".pdf", ".docx", ".txt", ".odt"],
    "images": [".jpg", ".jpeg", ".png", ".webp"],
    "video": [".mp4", ".mkv", ".mov"],
    "audio": [".mp3", ".wav", ".flac"],
    "archives": [".zip", ".tar", ".gz", ".7z"],
    "code": [".py", ".js", ".ts", ".rs", ".java"],
    "data": [".json", ".csv", ".xml"],
}
src/safesort/classifier.py
OTHER_CATEGORY = "other"

def classify(extension: str, mapping: dict[str, list[str]]) -> str:
    normalized = extension.lower()
    for category, extensions in mapping.items():
        lowered = {ext.lower() for ext in extensions}
        if normalized in lowered:
            return category
    return OTHER_CATEGORY
Klasyfikacja w rozszerzeniu jest heurystyką, a nie dowodem treści
Rozbudowa .pdf oznacza tylko, że nazwa pliku kończy się na .pdf nic nie stoi na przeszkodzie, by zmienić nazwę dowolnego pliku tak, by jego rozszerzenie nie pasowało do rzeczywistego formatu. SafeSort celowo nie zagląda do środka pliku: byłoby wolniejsze, mniej przewidywalne i wykraczałoby poza zadanie „sortowania plików według tego, czym się nazywają”

plik o rozszerzeniu, który nie należy do żadnej kategorii, należy do "other" — w ten sposób klasyfikacja pozostaje kompletna: dowolny plik Zawsze istnieje jakaś kategoria, nawet jeśli jest najszersza.

Praktyka: classify() i kategorie niestandardowe
Interaktywny Laptop w przeglądarce: Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →
Checkpoint · Issue #2
git commit -m "feat: add file classification"
Zlał się jak Pull Request #16 z osobnej, niezależnej gałęzi, która nie jest powiązana z innymi Issues.
Status prawdziwego Project: Done