Wie man das aktuelle Verzeichnis in Python abfragt
Um das aktuelle Arbeitsverzeichnis in Python zu ermitteln, kannst du entweder os.getcwd() aus dem Modul os oder pathlib.Path.cwd() aus dem Modul pathlib verwenden.
Viele Python-Programme müssen im Dateisystem navigieren, um Dateien zu lesen und zu schreiben. Eine häufige Operation ist das Abrufen des aktuellen Arbeitsverzeichnisses, das oft mit CWD abgekürzt wird.
Python verfügt über zwei Hauptmodule, die für den Zugriff auf die Dateisystempfade verwendet werden können: dasModulos und das Modul pathlib.
Das Modul os bietet den traditionellen Ansatz, um das aktuelle Arbeitsverzeichnis zu ermitteln und arbeitet mit Pfaden und dem Dateisystem.
Das pathlib ist ein neueres Modul, das einen objektorientierten Ansatz bietet, der robust und plattformübergreifend ist.
In diesem Lernprogramm erforsche ich die verschiedenen Techniken, um das aktuelle Arbeitsverzeichnis zu holen und zu bearbeiten. Wenn du mehr über Python erfahren möchtest, kannst du dich in meinen anderen Blogbeiträgen umsehen:
Python: So erhältst du das aktuelle Arbeitsverzeichnis (CWD)
Das aktuelle Arbeitsverzeichnis ist das Verzeichnis, in dem ein Python-Programm ausgeführt wird. Sie dient als Referenzpunkt für relative Dateipfade und ermöglicht dem Programm den Zugriff auf Dateien und Ressourcen innerhalb der Verzeichnishierarchie.
Schauen wir uns an, wie man mit den Modulen os und pathlib auf das aktuelle Arbeitsverzeichnis zugreift und vergleichen die beiden Lösungen.
Mit os.getcwd()
Das Modul os ermöglicht den Zugriff auf das Betriebssystem des Computers. Mit der Funktion getcwd() kannst du das aktuelle Arbeitsverzeichnis abrufen:
Die Ausgabe zeigt den Pfad des Verzeichnisses an, das das Skript enthält. Das Format des Pfads hängt vom Betriebssystem ab. Die obige Ausgabe gilt für POSIX-Betriebssysteme wie Linux, Unix und macOS.
Auf einem Windows-System würde derselbe Pfad wie folgt angezeigt:
Deshalb müssen wir String-Methoden und andere String-Operationen verwenden, um mit diesem Pfad umzugehen.
Mit pathlib.Path.cwd()
Mit Python 3.4 wurde das Modul pathlib eingeführt, das einen objektorientierten Ansatz für den Zugriff auf und die Bearbeitung von Dateipfaden bietet. Die wichtigste Klasse in pathlib ist Path, die wir importieren können, bevor wir das aktuelle Arbeitsverzeichnis erhalten:
Die Druckausgabe von Path.cwd() sieht ähnlich aus wie der Wert, der von os.getcwd() zurückgegeben wird. Path.cwd() gibt jedoch keine Zeichenkette zurück. Wir können dies bestätigen, indem wir den Typ des zurückgegebenen Objekts ausdrucken oder seine offizielle String-Repräsentation mit repr() anzeigen:
<class 'pathlib.PosixPath'>
PosixPath('/Users/sg/Documents/GitHub/datacamp')Bereitgestellt von
Auf einem Windows-Computer gibt Path.cwd() ein WindowsPath Objekt zurück.
Die Objekte PosixPath und WindowsPath bieten ähnliche Funktionen, um plattformübergreifende Programme zu ermöglichen. Hier sind einige der Eigenschaften dieser Objekte:
Wann immer es möglich ist, solltest du das Modul pathlib verwenden, das moderner ist und den Umgang mit Pfaden erleichtert. Du kannst diese umfassende Anleitung zur Verwendung von pathlib in Python lesen, wenn du mehr erfahren willst.
Arbeiten mit dem aktuellen Verzeichnis
Python-Programme müssen oft den Pfad manipulieren, zum Beispiel, um eine Datei in einem Unterordner zu speichern. Nehmen wir an, wir müssen ein neues Unterverzeichnis in unserem aktuellen Arbeitsverzeichnis erstellen und eine Textdatei in dem neuen Ordner speichern.
Mit dem os Modul
Die Funktion getcwd() im Modul os gibt einen String zurück. Daher ist es möglich, diese Zeichenfolge manuell zu ändern, um den Pfad zu ändern. Die erforderlichen Änderungen sind jedoch je nach Betriebssystem unterschiedlich, da verschiedene Systeme unterschiedliche Pfadformate haben. Eine bessere Option ist die Verwendung von os.path.join():
import os
cwd = os.getcwd()
output_path = os.path.join(cwd,"testing_os")print(output_path)Bereitgestellt von
Der Pfad, den os.path.join() zurückgibt, hat das richtige Format für das verwendete Betriebssystem. Dies gibt einen String mit dem neuen Pfad zurück. Wir können überprüfen, ob dieser Unterordner existiert, indem wir os.path.exists() verwenden, das einen booleschen Wert zurückgibt:
Das zeigt, dass der Pfad, der durch output_path dargestellt wird, noch nicht existiert. Das Modul os bietet Werkzeuge, um diesen Ordner zu erstellen. Die Funktion os.mkdir() erstellt ein neues Verzeichnis:
os.mkdir(output_path)print(os.path.exists(output_path))Bereitgestellt von
Der neue Unterordner existiert jetzt und neue Dateien können in diesem Ordner gespeichert werden:
output_file = os.path.join(output_path,"test.txt")withopen(output_file,"w")asfile:file.write("Testing path modification with the 'os' module")Bereitgestellt von
Die Variable output_file enthält den Namen der gewünschten Ausgabedatei mit dem vollständigen Pfad. Diese Textdatei wird im Unterordner /testing_os im aktuellen Arbeitsverzeichnis erstellt.
Wir können auch alle Objekte in einem Ordner mit os.listdir() auflisten:
Die Funktion os.listdir() gibt eine Liste mit allen Einträgen im Verzeichnis zurück. Dieser Code durchläuft diese Liste und zeigt jede Datei oder jeden Ordner in einer eigenen Zeile an. In diesem Beispiel enthält das Verzeichnis eine einzelne Textdatei.
Mit dem pathlib Modul
Das neuere Modul pathlib bietet auch Werkzeuge, um neue Pfade zu erstellen. Dieses Modul verwendet den Schrägstrich-Operator /, um Elemente in einem Pfad zu kombinieren. Dies ist derselbe Operator, der für die Division von numerischen Datentypen verwendet wird, aber es ist auch das Zeichen, das in Dateipfaden in POSIX-Betriebssystemen verwendet wird. Erstellen wir einen neuen Pfad und überprüfen wir, ob er nicht schon existiert:
from pathlib import Path
cwd = Path.cwd()
output_path = cwd /"testing_pathlib"print(output_path)print(Path.exists(output_path))Bereitgestellt von
/Users/sg/Documents/GitHub/datacamp/testing_pathlib
FalseBereitgestellt von
Die Klasse Path hat ihre eigene Methode .mkdir(), um ein neues Verzeichnis zu erstellen:
Path.mkdir(output_path)print(Path.exists(output_path))Bereitgestellt von
/Users/sg/Documents/GitHub/datacamp/testing_pathlib/test.txtBereitgestellt von
Wie bei anderen Tools in pathlib ist der zurückgegebene Wert keine Zeichenkette. Stattdessen ist es ein PosixPath oder WindowsPath Objekt. Wir können das Attribut .name verwenden, um den Datei- oder Ordnernamen ohne den vollständigen Pfad anzuzeigen:
for item in Path.iterdir(output_path):print(item.name)Bereitgestellt von
Während os.listdir() eine Liste zurückgibt, gibt pathlib.Path.iterdir() ein generator Objekt zurück (du kannst dieses Tutorial über Python Iteratoren und Generatoren lesen, wenn du eine Auffrischung brauchst):
Dieses Verhalten entspricht den besten Praktiken in modernem Python, da Iteratoren und Generatoren in bestimmten Situationen effizienter sind.
Ändern des aktuellen Arbeitsverzeichnisses (CWD)
Es ist auch möglich, das aktuelle Arbeitsverzeichnis direkt aus einem Python-Programm heraus zu wechseln: os.chdir(). Da dies keine Operation ist, die direkt mit dem Pfad zusammenhängt, gibt es keine alternative Version in pathlib. Wir können aber trotzdem pathlib.Path Objekte als Argumente verwenden:
import os
from pathlib import Path
cwd = Path.cwd()print(cwd)
os.chdir(cwd.parent)
cwd = Path.cwd()print(cwd)Bereitgestellt von
/Users/sg/Documents/GitHub/datacamp
/Users/sg/Documents/GitHubBereitgestellt von
Das Arbeitsverzeichnis hat sich nun geändert. Wir können auch cwd.parent.resolve() verwenden, um sicherzustellen, dass alle symbolischen Links richtig behandelt werden. Das Argument in os.chdir() kann auch eine Zeichenkette sein, wie zum Beispiel die Pfade, die von den Funktionen im Modul os zurückgegeben werden.
Beim Ändern des Arbeitsverzeichnisses innerhalb eines Programms ist Vorsicht geboten, damit es nicht zu unerwarteten Verhaltensweisen kommt.
Bewährte Praktiken und Tipps
Hier sind einige bewährte Methoden und Tipps für die Arbeit mit Pfaden in Python:
Fazit
Das Navigieren und Manipulieren von Dateipfaden ist eine häufige Anforderung in vielen Python-Programmen. Das Modul os bietet die traditionellen Funktionen für die Bearbeitung dieser Aufgaben, während das Modul pathlib einen moderneren, objektorientierten Ansatz bietet. Die Verwendung von pathlib vereinfacht nicht nur viele Vorgänge, sondern sorgt auch dafür, dass dein Code plattformübergreifend und leichter lesbar bleibt.
Ganz gleich, ob du eine bestehende Codebasis pflegst, die os verwendet, oder ein neues Projekt beginnst, bei dem du pathlib nutzen kannst: Wenn du beide Module und ihre Fähigkeiten verstehst, kannst du Pfade in jedem Python-Projekt flexibel und sicher verwalten.
Mit diesen Kursen kannst du deine Python-Lernreise fortsetzen:
Ich habe Physik und Mathematik auf UG-Ebene an der Universität Malta studiert. Dann zog ich nach London und machte meinen Doktor in Physik am Imperial College. Ich habe an neuartigen optischen Techniken zur Abbildung der menschlichen Netzhaut gearbeitet. Jetzt konzentriere ich mich darauf, über Python zu schreiben, über Python zu kommunizieren und Python zu unterrichten.
Lerne effiziente Methoden, um ein Wörterbuch in Python nach Werten zu sortieren. Lerne, wie du Sachen aufsteigend oder absteigend sortieren kannst, und hol dir ein paar coole Tipps zum Sortieren von Schlüsseln.
Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Lerne die Funktionen und Methoden von Python-Listen kennen. Schau dir jetzt die Code-Beispiele für list() und andere Python-Funktionen und -Methoden an!
Viele Python-Programme müssen im Dateisystem navigieren, um Dateien zu lesen und zu schreiben. Eine häufige Operation ist das Abrufen des aktuellen Arbeitsverzeichnisses, das oft mit CWD abgekürzt wird.
Python verfügt über zwei Hauptmodule, die für den Zugriff auf die Dateisystempfade verwendet werden können: dasModul
osund das Modulpathlib.Das Modul
osbietet den traditionellen Ansatz, um das aktuelle Arbeitsverzeichnis zu ermitteln und arbeitet mit Pfaden und dem Dateisystem.Das
pathlibist ein neueres Modul, das einen objektorientierten Ansatz bietet, der robust und plattformübergreifend ist.In diesem Lernprogramm erforsche ich die verschiedenen Techniken, um das aktuelle Arbeitsverzeichnis zu holen und zu bearbeiten. Wenn du mehr über Python erfahren möchtest, kannst du dich in meinen anderen Blogbeiträgen umsehen:
Python: So erhältst du das aktuelle Arbeitsverzeichnis (CWD)
Das aktuelle Arbeitsverzeichnis ist das Verzeichnis, in dem ein Python-Programm ausgeführt wird. Sie dient als Referenzpunkt für relative Dateipfade und ermöglicht dem Programm den Zugriff auf Dateien und Ressourcen innerhalb der Verzeichnishierarchie.
Schauen wir uns an, wie man mit den Modulen
osundpathlibauf das aktuelle Arbeitsverzeichnis zugreift und vergleichen die beiden Lösungen.Mit
os.getcwd()Das Modul
osermöglicht den Zugriff auf das Betriebssystem des Computers. Mit der Funktiongetcwd()kannst du das aktuelle Arbeitsverzeichnis abrufen:Die Ausgabe zeigt den Pfad des Verzeichnisses an, das das Skript enthält. Das Format des Pfads hängt vom Betriebssystem ab. Die obige Ausgabe gilt für POSIX-Betriebssysteme wie Linux, Unix und macOS.
Auf einem Windows-System würde derselbe Pfad wie folgt angezeigt:
Der von
os.getcwd()zurückgegebene Wert ist eine Zeichenkette:Deshalb müssen wir String-Methoden und andere String-Operationen verwenden, um mit diesem Pfad umzugehen.
Mit
pathlib.Path.cwd()Mit Python 3.4 wurde das Modul
pathlibeingeführt, das einen objektorientierten Ansatz für den Zugriff auf und die Bearbeitung von Dateipfaden bietet. Die wichtigste Klasse inpathlibistPath, die wir importieren können, bevor wir das aktuelle Arbeitsverzeichnis erhalten:Die Druckausgabe von
Path.cwd()sieht ähnlich aus wie der Wert, der vonos.getcwd()zurückgegeben wird.Path.cwd()gibt jedoch keine Zeichenkette zurück. Wir können dies bestätigen, indem wir den Typ des zurückgegebenen Objekts ausdrucken oder seine offizielle String-Repräsentation mitrepr()anzeigen:Auf einem Windows-Computer gibt
Path.cwd()einWindowsPathObjekt zurück.Die Objekte
PosixPathundWindowsPathbieten ähnliche Funktionen, um plattformübergreifende Programme zu ermöglichen. Hier sind einige der Eigenschaften dieser Objekte:Wann immer es möglich ist, solltest du das Modul
pathlibverwenden, das moderner ist und den Umgang mit Pfaden erleichtert. Du kannst diese umfassende Anleitung zur Verwendung von pathlib in Python lesen, wenn du mehr erfahren willst.Arbeiten mit dem aktuellen Verzeichnis
Python-Programme müssen oft den Pfad manipulieren, zum Beispiel, um eine Datei in einem Unterordner zu speichern. Nehmen wir an, wir müssen ein neues Unterverzeichnis in unserem aktuellen Arbeitsverzeichnis erstellen und eine Textdatei in dem neuen Ordner speichern.
Mit dem
osModulDie Funktion
getcwd()im Modulosgibt einen String zurück. Daher ist es möglich, diese Zeichenfolge manuell zu ändern, um den Pfad zu ändern. Die erforderlichen Änderungen sind jedoch je nach Betriebssystem unterschiedlich, da verschiedene Systeme unterschiedliche Pfadformate haben. Eine bessere Option ist die Verwendung vonos.path.join():Der Pfad, den
os.path.join()zurückgibt, hat das richtige Format für das verwendete Betriebssystem. Dies gibt einen String mit dem neuen Pfad zurück. Wir können überprüfen, ob dieser Unterordner existiert, indem wiros.path.exists()verwenden, das einen booleschen Wert zurückgibt:Das zeigt, dass der Pfad, der durch
output_pathdargestellt wird, noch nicht existiert. Das Modulosbietet Werkzeuge, um diesen Ordner zu erstellen. Die Funktionos.mkdir()erstellt ein neues Verzeichnis:Der neue Unterordner existiert jetzt und neue Dateien können in diesem Ordner gespeichert werden:
Die Variable
output_fileenthält den Namen der gewünschten Ausgabedatei mit dem vollständigen Pfad. Diese Textdatei wird im Unterordner/testing_osim aktuellen Arbeitsverzeichnis erstellt.Wir können auch alle Objekte in einem Ordner mit
os.listdir()auflisten:Die Funktion
os.listdir()gibt eine Liste mit allen Einträgen im Verzeichnis zurück. Dieser Code durchläuft diese Liste und zeigt jede Datei oder jeden Ordner in einer eigenen Zeile an. In diesem Beispiel enthält das Verzeichnis eine einzelne Textdatei.Mit dem
pathlibModulDas neuere Modul
pathlibbietet auch Werkzeuge, um neue Pfade zu erstellen. Dieses Modul verwendet den Schrägstrich-Operator/, um Elemente in einem Pfad zu kombinieren. Dies ist derselbe Operator, der für die Division von numerischen Datentypen verwendet wird, aber es ist auch das Zeichen, das in Dateipfaden in POSIX-Betriebssystemen verwendet wird. Erstellen wir einen neuen Pfad und überprüfen wir, ob er nicht schon existiert:Die Klasse
Pathhat ihre eigene Methode.mkdir(), um ein neues Verzeichnis zu erstellen:Da
output_patheinPosixPathoderWindowsPathObjekt ist, können wir den Schrägstrich-Operator überall verwenden, um einen neuen Pfad zu erstellen:Die neue Textdatei wird im Ordner
/testing_pathliberstellt.Wir können die Methode
Path.iterdir()verwenden, um jedes Element in einem Ordner zu durchlaufen:Wie bei anderen Tools in
pathlibist der zurückgegebene Wert keine Zeichenkette. Stattdessen ist es einPosixPathoderWindowsPathObjekt. Wir können das Attribut.nameverwenden, um den Datei- oder Ordnernamen ohne den vollständigen Pfad anzuzeigen:Während
os.listdir()eine Liste zurückgibt, gibtpathlib.Path.iterdir()eingeneratorObjekt zurück (du kannst dieses Tutorial über Python Iteratoren und Generatoren lesen, wenn du eine Auffrischung brauchst):Dieses Verhalten entspricht den besten Praktiken in modernem Python, da Iteratoren und Generatoren in bestimmten Situationen effizienter sind.
Ändern des aktuellen Arbeitsverzeichnisses (CWD)
Es ist auch möglich, das aktuelle Arbeitsverzeichnis direkt aus einem Python-Programm heraus zu wechseln:
os.chdir(). Da dies keine Operation ist, die direkt mit dem Pfad zusammenhängt, gibt es keine alternative Version inpathlib. Wir können aber trotzdempathlib.PathObjekte als Argumente verwenden:Das Arbeitsverzeichnis hat sich nun geändert. Wir können auch
cwd.parent.resolve()verwenden, um sicherzustellen, dass alle symbolischen Links richtig behandelt werden. Das Argument inos.chdir()kann auch eine Zeichenkette sein, wie zum Beispiel die Pfade, die von den Funktionen im Moduloszurückgegeben werden.Beim Ändern des Arbeitsverzeichnisses innerhalb eines Programms ist Vorsicht geboten, damit es nicht zu unerwarteten Verhaltensweisen kommt.
Bewährte Praktiken und Tipps
Hier sind einige bewährte Methoden und Tipps für die Arbeit mit Pfaden in Python:
Fazit
Das Navigieren und Manipulieren von Dateipfaden ist eine häufige Anforderung in vielen Python-Programmen. Das Modul
osbietet die traditionellen Funktionen für die Bearbeitung dieser Aufgaben, während das Modulpathlibeinen moderneren, objektorientierten Ansatz bietet. Die Verwendung vonpathlibvereinfacht nicht nur viele Vorgänge, sondern sorgt auch dafür, dass dein Code plattformübergreifend und leichter lesbar bleibt.Ganz gleich, ob du eine bestehende Codebasis pflegst, die
osverwendet, oder ein neues Projekt beginnst, bei dem dupathlibnutzen kannst: Wenn du beide Module und ihre Fähigkeiten verstehst, kannst du Pfade in jedem Python-Projekt flexibel und sicher verwalten.Mit diesen Kursen kannst du deine Python-Lernreise fortsetzen: