Dateipfade vervollständigen

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Da ich dank Erkältung eh nicht gut schlafen kann, spende ich der Welt einen simplen Completer für Dateinamen:

Code: Alles auswählen

#!/usr/bin/env python3
from pathlib import Path

def get_path_completions(value, is_pattern=False):
    if is_pattern:
        return list(Path().glob(value))
    path = Path(value)
    if path.is_file():
        return [path]
    if path.is_dir():
        return list(path.iterdir())
    if not path.parent.is_dir():
        return []
    needle = path.name.lower()
    return [
        result for result in path.parent.iterdir()
        if needle in str(result).lower()
    ]
Wird ein existierender Ordner angegeben, dann listet den Inhalt des Ordners auf. Andernfalls wird ein Teilstring vermutet und das Ergebnis enthält alle Dateinamen aus dem übergeordneten Pfad, die zur Suchanfrage passen (d.h. den Teilstring enthalten). Es wird immer nur der letzte Bestandteil der Pfadangabe betrachtet. Wenn der darüberliegende Pfad schon ungültig ist, bekommt man eine leere Liste. Also "Documents/test" liefert alles, was "test" enthält und in "Documents" liegt, während "hurz/test" keine Ergebnisse bringt, falls "hurz" als Ordner nicht existiert. "Documents" ohne zusätzliche Angaben bringt den kompletten Inhalt des entsprechenden Ordners. Die Ergebnisse sind immer Path()-Objekte, sodass man recht einfach weitere Filter anwenden kann (z.B. nur "echte" Dateien, keine Ordner nehmen). Als zusätzliches Argument gibt es "is_pattern", was aber einfach nur eine Weiterleitung an Path().glob() darstellt (somit werden u.a. *-Angaben entsprechend interpretiert).
Antworten