Python — Pfad zum Benutzerverzeichnis ermitteln

Der Pfad zu einem Benutzerverzeichnis kann je nach Betriebssystem variieren. Sollte der Benutzername beispielsweise „kendra“ lauten, dann hätten wir es mit folgenden Pfaden zu tun:

/Users/kendra  # Windows
/Users/kendra  # macOS
/home/kendra   # Linux

Schreibt man ein Python-Programm für den Eigenbedarf, könnte man einfach den entsprechenden Pfad zum eigenen Benutzerverzeichnis verwenden (also /Users/<Benutzername>). Anders sieht es aus, wenn auch Dritte das Programm auf ihren Systemen ausführen sollen. Dann wird man einen Weg gehen müssen, der sicherstellt, das unabhängig vom Betriebssystem, der richtige Pfad verwendet wird. Hierfür stehen mehrere Möglichkeiten zur Verfügung, von denen ich in diesem Blogbeitrag drei vorstellen möchte.

getpass

Den Anfang macht getpass, das zunächst importiert werden muss:

import getpass

Mit folgender Zeile erhalten wir zunächst den Benutzernamen, der hier der Variable user zugewiesen wird:

user = getpass.getuser()

Anschließend kann dann der Pfad zum Benutzerverzeichnis (oder zu einem anderen Ordner unterhalb des Benutzerverzeichnisses) einer Variable zugewiesen werden, die man später im Code verwenden kann:

home = Path(f"/Users/{user}")  # an das Betriebssystem anpassen

Den Pfad könnte man sich mit print() ausgeben lassen, was im Falle von „kendra“ zu folgender Ausgabe führen würde:

print(home)
# -> /Users/kendra

Über diese Vorgehensweise hätte man die Windows- und Mac-Nutzer berücksichtigt. Für Linux müsste hingegen folgender Code verwendet werden:

home = Path(f"/home/{user}")

Zuvor könnte man Code schreiben, der feststellt, welches Betriebssystem verwendet wird, um dann in einem zweiten Schritt den Pfad zu ermitteln.

Besser wäre es, wenn man nicht zunächst das verwendete Betriebssystem ermitteln müsste. Und damit kommen wir zur zweiten Möglichkeit, die uns dies erspart.

expanduser

Die Rede ist von der Verwendung von expanduser, das ich bereits in einem älteren Artikel vorgestellt hatte. Schauen wir uns den zu verwendenden Code an:

from os.path import expanduser

home = expanduser("~")

Der Pfand zum Benutzerverzeichnis wird in diesem Beispiel wieder der Variable home zugewiesen. Das jeweilige Benutzerverzeichnis erhält man, indem das Tilde-Zeichen ~ an expanduser() übergeben wird. Dieses Zeichen steht für das Benutzerverzeichnis (also beispielsweise für /home/kendra auf einem Linux-System).

Wenn wir uns nun mit print() den Wert von home ausgeben lassen, erhalten wir folgende Pfade:

print(home)
# -> Windows: C:\Users\kendra
# -> macOS: /Users/kendra
# -> Linux: /home/kendra

Im Gegensatz zur ersten Lösung, müssen wir uns hier also über das Betriebssystem keine Gedanken machen.

Path

Kommen wir nun zur dritten Möglichkeit, die Verwendung von Path.home(). Der Code sieht wie folgt aus:

from pathlib import Path

home = Path.home()

print(home)
# -> Windows: C:\Users\kendra
# -> macOS: /Users/kendra
# -> Linux: /home/kendra

Über diesen Weg ist es sehr einfach Pfade zu bauen. Im folgenden Beispiel der Pfad zum Dokumente-Verzeichnis der Variable documents_dir zugewiesen:

 documents_dir = Path.home() / "Documents"

Mit dem Code Path.home() / "Documents" erhält man ein Path-Objekt, das auf den Dokumente-Ordner des jeweiligen Benutzerverzeichnisses zeigt. Bei / handelt es sich um einen überladenen Operator der pathlib-Bibliothek.

Überprüfen, ob das Verzeichnis existiert

Wenn man mit Pfaden arbeitet, sollte man auch überprüfen, ob der Pfad tatsächlich existiert. Auch hier bieten sich verschieden Wege an. Die pathlib-Bibliothek stellt hierfür die Methode exists() bereit:

from pathlib import Path

documents_dir = Path.home() / "Documents"

if documents_dir.exists():
    print("The Documents folder exists.")
else:
    print("The Documents folder does not exist.")

Möglich wäre auch die Implementierung einer Ausnahmebehandlung:

try:
    documents_dir = Path.home() / "Documents"
except Exception as e:
    print(f"Error retrieving Documents directory: {e}")
    return None