Bild vom Autor
In Python kann die Verwendung regulärer Zeichenfolgen für Dateisystempfade mühsam sein, insbesondere wenn Sie Operationen an den Pfadzeichenfolgen durchführen müssen. Der Wechsel zu einem anderen Betriebssystem führt ebenfalls zu schwerwiegenden Änderungen an Ihrem Code. Ja, Sie können verwenden os.Pfad von dem OS-Modul um die Dinge einfacher zu machen. Aber die Pfadbibliothek Modul macht das Ganze viel intuitiver.
Das in Python 3.4 eingeführte Modul „pathlib“ (ja, es gibt es schon eine Weile) ermöglicht einen OOP-Ansatz, mit dem Sie Pfadobjekte erstellen und damit arbeiten können, und verfügt über Batterien für gängige Vorgänge wie das Verbinden und Bearbeiten von Pfaden, das Auflösen von Pfaden und mehr.
Dieses Tutorial führt Sie in die Arbeit mit dem Dateisystem unter Verwendung des Moduls pathlib ein. Lassen Sie uns beginnen.
Arbeiten mit Pfadobjekten
Um pathlib verwenden zu können, müssen Sie zunächst die Path
Klasse:
Dadurch können Sie Pfadobjekte zum Erstellen und Bearbeiten von Dateisystempfaden instanziieren.
Erstellen von Pfadobjekten
Sie können ein Path
Objekt, indem Sie einen String übergeben, der den Pfad darstellt, etwa so:
path = Path('your/path/right here')
Sie können neue Pfadobjekte auch aus vorhandenen Pfaden erstellen. Sie können beispielsweise Pfadobjekte aus Ihrem Dwelling-Verzeichnis oder dem aktuellen Arbeitsverzeichnis erstellen:
home_dir = Path.dwelling()
print(home_dir)
cwd = Path.cwd()
print(cwd)
Dies sollte zu einer ähnlichen Ausgabe führen:
Output >>>
/dwelling/balapriya
/dwelling/balapriya/project1
Angenommen, Sie haben ein Basisverzeichnis und möchten einen Pfad zu einer Datei in einem Unterverzeichnis erstellen. So können Sie das tun:
from pathlib import Path
# import Path from pathlib
from pathlib import Path
# create a base path
base_path = Path("/dwelling/balapriya/Paperwork")
# create new paths from the bottom path
subdirectory_path = base_path / "initiatives"https://www.kdnuggets.com/"project1"
file_path = subdirectory_path / "report.txt"
# Print out the paths
print("Base path:", base_path)
print("Subdirectory path:", subdirectory_path)
print("File path:", file_path)
Dadurch wird zunächst ein Pfadobjekt für das Basisverzeichnis erstellt: /dwelling/balapriya/Paperwork
. Denken Sie daran, diesen Basispfad durch einen gültigen Dateisystempfad in Ihrer Arbeitsumgebung zu ersetzen..
Es erstellt dann subdirectory_path
durch das Mitmachen base_path
mit den Unterverzeichnissen initiatives
Und project1
. Endlich, das file_path
entsteht durch die Verbindung subdirectory_path
mit dem Dateinamen report.txt
.
Wie Sie sehen, können Sie mit dem /
Operator, um einen Verzeichnis- oder Dateinamen an den aktuellen Pfad anzuhängen und ein neues Pfadobjekt zu erstellen. Beachten Sie, wie die Überladung des /
Der Operator bietet eine lesbare und intuitive Möglichkeit, Pfade zu verbinden.
Wenn Sie den obigen Code ausführen, werden die folgenden Pfade ausgegeben:
Output >>>
Base path: /dwelling/balapriya/paperwork
Subdirectory path: /dwelling/balapriya/paperwork/initiatives/project1
File path: /dwelling/balapriya/paperwork/initiatives/project1/report.txt
Überprüfen des Standing und der Pfadtypen
Sobald Sie über ein gültiges Pfadobjekt verfügen, können Sie einfache Methoden aufrufen, um den Standing und den Typ des Pfads zu überprüfen.
Um zu prüfen, ob ein Pfad existiert, rufen Sie den exists()
Methode:
path = Path("/dwelling/balapriya/Paperwork")
print(path.exists())
Wenn der Pfad existiert, wird ausgegeben True
; andernfalls gibt es zurück False
.
Sie können auch prüfen, ob es sich bei einem Pfad um eine Datei oder ein Verzeichnis handelt:
print(path.is_file())
print(path.is_dir())
Notiz: Ein Objekt der
Path
Klasse erstellt einen konkreten Pfad für Ihr Betriebssystem. Sie können aber auch verwendenPurePath
wenn Sie Pfade verarbeiten müssen, ohne auf das Dateisystem zuzugreifen, z. B. beim Arbeiten mit Home windows-Pfaden auf einem Unix-Laptop.
Navigieren im Dateisystem
Mit pathlib ist die Navigation im Dateisystem ziemlich unkompliziert. Sie können den Inhalt von Verzeichnissen durchlaufen, Pfade umbenennen und auflösen und vieles mehr.
Sie erreichen uns unter iterdir()
Methode auf dem Pfadobjekt wie folgt, um über den gesamten Inhalt eines Verzeichnisses zu iterieren:
path = Path("/dwelling/balapriya/project1")
# iterating over listing contents
for merchandise in path.iterdir():
print(merchandise)
Hier ist die Beispielausgabe:
Output >>>
/dwelling/balapriya/project1/check.py
/dwelling/balapriya/project1/principal.py
Umbenennen von Dateien
Sie können Dateien umbenennen, indem Sie den rename()
Methode für das Pfadobjekt:
path = Path('old_path')
path.rename('new_path')
Hier benennen wir check.py
im project1
Verzeichnis zu assessments.py
:
path = Path('/dwelling/balapriya/project1/check.py')
path.rename('/dwelling/balapriya/project1/assessments.py')
Du kannst jetzt cd
in die project1
Verzeichnis, um zu überprüfen, ob die Datei umbenannt wurde.
Löschen von Dateien und Verzeichnissen
Sie können auch eine Datei löschen und leere Verzeichnisse entfernen mit dem unlink()
zu und rmdir()
Methoden.
# For information
path.unlink()
# For empty directories
path.rmdir()
Notiz: Nun, falls das Löschen leerer Verzeichnisse Sie neugierig gemacht hat, wie man sie erstellt. Ja, Sie können auch Verzeichnisse erstellen mit
mkdir()
etwa so:path.mkdir(dad and mom=True, exist_ok=True)
. Dermkdir()
Methode erstellt ein neues Verzeichnis. Einstellungdad and mom=True
ermöglicht die Erstellung von übergeordneten Verzeichnissen nach Bedarf undexist_ok=True
verhindert Fehler, wenn das Verzeichnis bereits existiert.
Auflösen absoluter Pfade
Manchmal ist es einfacher, mit relativen Pfaden zu arbeiten und diese bei Bedarf auf den absoluten Pfad zu erweitern. Sie können dies mit dem resolve()
Methode, und die Syntax ist tremendous einfach:
absolute_path = relative_path.resolve()
Hier ist ein Beispiel:
relative_path = Path('new_project/README.md')
absolute_path = relative_path.resolve()
print(absolute_path)
Und die Ausgabe:
Output >>> /dwelling/balapriya/new_project/README.md
Datei-Globbing
Globbing ist sehr hilfreich, um Dateien zu finden, die bestimmten Mustern entsprechen. Nehmen wir ein Beispielverzeichnis:
projectA/
├── projectA1/
│ └── knowledge.csv
└── projectA2/
├── script1.py
├── script2.py
├── file1.txt
└── file2.txt
Hier ist der Pfad:
path = Path('/dwelling/balapriya/projectA')
Versuchen wir, alle Textdateien zu finden mit glob()
:
text_files = checklist(path.glob('*.txt'))
print(text_files)
Überraschenderweise erhalten wir die Textdateien nicht. Die Liste ist leer:
Dies liegt daran, dass sich diese Textdateien im Unterverzeichnis befinden und glob diese Unterverzeichnisse nicht durchsucht. Geben Sie rekursives Globbing ein mit rglob()
.
text_files = checklist(path.rglob('*.txt'))
print(text_files)
Der rglob()
Die Methode führt eine rekursive Suche nach allen Textdateien im Verzeichnis und allen Unterverzeichnissen durch. Wir sollten additionally die erwartete Ausgabe erhalten:
Output >>>
(PosixPath('/dwelling/balapriya/projectA/projectA2/file2.txt'),
PosixPath('/dwelling/balapriya/projectA/projectA2/file1.txt'))
Und das ist ein Wrap!
Einpacken
In diesem Tutorial haben wir das Modul pathlib untersucht und wie es die Navigation und Manipulation von Dateisystemen in Python zugänglich macht. Wir haben genug Themen abgedeckt, um Ihnen beim Erstellen und Arbeiten mit Dateisystempfaden in Python-Skripten zu helfen.
Den in diesem Tutorial verwendeten Code finden Sie auf GitHub. Im nächsten Tutorial werden wir uns interessante praktische Anwendungen ansehen. Bis dahin, programmieren Sie weiter!
Bala Priya C ist Entwicklerin und technische Redakteurin aus Indien. Sie arbeitet gerne an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessens- und Fachgebiete umfassen DevOps, Datenwissenschaft und natürliche Sprachverarbeitung. Sie liest, schreibt, programmiert und trinkt gerne Kaffee! Derzeit arbeitet sie daran, ihr Wissen zu lernen und mit der Entwickler-Group zu teilen, indem sie Tutorials, Anleitungen, Meinungsbeiträge und mehr verfasst. Bala erstellt auch ansprechende Ressourcenübersichten und Programmier-Tutorials.