Direkt zum Inhalt

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.
Aktualisierte 16. Jan. 2025

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 os 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:

import os
cwd = os.getcwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp

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:

C:\Users\sg\Documents\GitHub\datacamp

Der von os.getcwd() zurückgegebene Wert ist eine Zeichenkette:

print(type(cwd))
<class 'str'>

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:

from pathlib import Path
cwd = Path.cwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp

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:

print(type(cwd))
print(repr(cwd))
<class 'pathlib.PosixPath'>
PosixPath('/Users/sg/Documents/GitHub/datacamp')

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:

print(cwd.parent)
print(cwd.name)
/Users/sg/Documents/GitHub
datacamp

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)
/Users/sg/Documents/GitHub/datacamp/testing_os

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:

print(os.path.exists(output_path))
False

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))
True

Der neue Unterordner existiert jetzt und neue Dateien können in diesem Ordner gespeichert werden:

output_file = os.path.join(output_path, "test.txt")
with open(output_file, "w") as file:
    file.write("Testing path modification with the 'os' module")

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:

for item in os.listdir(output_path):
    print(item)
test.txt

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))
/Users/sg/Documents/GitHub/datacamp/testing_pathlib
False

Die Klasse Path hat ihre eigene Methode .mkdir(), um ein neues Verzeichnis zu erstellen:

Path.mkdir(output_path)
print(Path.exists(output_path))
True

Da output_path ein PosixPath oder WindowsPath Objekt ist, können wir den Schrägstrich-Operator überall verwenden, um einen neuen Pfad zu erstellen:

with open(output_path / "test.txt", "w") as file:
    file.write("Testing path modification with the 'pathlib' module")

Die neue Textdatei wird im Ordner /testing_pathlib erstellt.

Wir können die Methode Path .iterdir() verwenden, um jedes Element in einem Ordner zu durchlaufen:

for item in Path.iterdir(output_path):
    print(item)
/Users/sg/Documents/GitHub/datacamp/testing_pathlib/test.txt

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)
test.txt

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):

print(Path.iterdir(cwd))
<generator object Path.iterdir at 0x1036b2c20>

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)
/Users/sg/Documents/GitHub/datacamp
/Users/sg/Documents/GitHub

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:

Best Practices 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:


Stephen Gruppetta's photo
Author
Stephen Gruppetta
LinkedIn
Twitter

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.

Themen

Lerne Python mit diesen Kursen!

Kurs

Introduction to Python for Developers

3 hr
40.3K
Master the fundamentals of programming in Python. No prior knowledge required!
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn

Keine Hacks, keine Tricks. Schüler/innen und Lehrer/innen, lest weiter, um zu erfahren, wie ihr die Datenerziehung, die euch zusteht, kostenlos bekommen könnt.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

4 Min.

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Mehr anzeigenMehr anzeigen