Das pathlib-Modul von Python 3: Das Dateisystem zähmen

Das pathlib-Modul von Python 3: Das Dateisystem zähmen

Haben Sie Probleme mit der Dateipfadbehandlung in Python? In Python 3.4 und höher ist der Kampf jetzt vorbei! Sie müssen sich nicht mehr wie folgt über den Code kratzen:

>>>

>>> path.rsplit('\\', maxsplit=1)[0]

Oder erschrecken bei der Ausführlichkeit von:

>>>

>>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))

In diesem Lernprogramm erfahren Sie, wie Sie mit Dateipfaden - Namen von Verzeichnissen und Dateien - in Python arbeiten. Sie lernen neue Methoden zum Lesen und Schreiben von Dateien, zum Bearbeiten von Pfaden und zum zugrunde liegenden Dateisystem sowie einige Beispiele zum Auflisten und Durchlaufen von Dateien. Mit dem Modul "+ pathlib +" können die beiden obigen Beispiele mit elegantem, lesbarem und pythonischem Code wie folgt umgeschrieben werden:

>>>

>>> path.parent
>>> (pathlib.Path.home()/'realpython.txt').is_file()
*Kostenloser PDF-Download:* https://realpython.com/bonus/python-cheat-sheet-short/[Python 3 Cheat Sheet]

Das Problem bei der Behandlung von Python-Dateipfaden

Das Arbeiten mit Dateien und die Interaktion mit dem Dateisystem sind aus vielen verschiedenen Gründen wichtig. In den einfachsten Fällen werden möglicherweise nur Dateien gelesen oder geschrieben, manchmal sind jedoch komplexere Aufgaben zu erledigen. Möglicherweise müssen Sie alle Dateien in einem Verzeichnis eines bestimmten Typs auflisten, das übergeordnete Verzeichnis einer bestimmten Datei suchen oder einen eindeutigen Dateinamen erstellen, der noch nicht vorhanden ist.

Traditionell hat Python Dateipfade mit regulären Textzeichenfolgen dargestellt. Mit Unterstützung der Standardbibliothek https://docs.python.org/3/library/os.path.html [+ os.path +] war dies ausreichend, wenn auch etwas umständlich (als zweites Beispiel in der Einleitung) zeigt an). Da jedoch paths keine Zeichenfolgen sind, sind wichtige Funktionen in der gesamten Standardbibliothek verteilt, einschließlich Bibliotheken wie https://docs.python.org/3/library/os.html [+ os +, https://docs.python.org/3/library/glob.html [+ glob +] und https://docs.python.org/3/library/shutil.html [+ shutil +]. Das folgende Beispiel benötigt drei + import + -Anweisungen, um alle Textdateien in ein Archivverzeichnis zu verschieben:

import glob
import os
import shutil

for file_name in glob.glob('*.txt'):
    new_path = os.path.join('archive', file_name)
    shutil.move(file_name, new_path)

Bei Pfaden, die durch Zeichenfolgen dargestellt werden, ist es möglich, aber normalerweise eine schlechte Idee, reguläre Zeichenfolgenmethoden zu verwenden. Anstatt beispielsweise zwei Pfade wie reguläre Zeichenfolgen mit "+" zu verbinden, sollten Sie "+ os.path.join () " verwenden, um Pfade mit dem richtigen Pfadtrennzeichen auf dem Betriebssystem zu verbinden. Denken Sie daran, dass Windows ` \ ` verwendet, während Mac und Linux `/+` als Trennzeichen verwenden. Dieser Unterschied kann zu schwer zu erkennenden Fehlern führen, wie in unserem ersten Beispiel in der Einführung, das nur für Windows-Pfade funktioniert.

Das Modul + pathlib + wurde in Python 3.4 (PEP 428) eingeführt, um diese Herausforderungen zu bewältigen. Es sammelt die erforderlichen Funktionen an einem Ort und stellt sie über Methoden und Eigenschaften für ein benutzerfreundliches Objekt "+ Pfad +" zur Verfügung.

Früher verwendeten andere Pakete noch Zeichenfolgen für Dateipfade, aber ab Python 3.6 wird das Modul "+ pathlib +" in der gesamten Standardbibliothek unterstützt, was teilweise auf das Hinzufügen eines https://www.python.org/dev/zurückzuführen ist. peps/pep-0519/[Dateisystempfadprotokoll]. Wenn Sie nicht mehr mit Python arbeiten, steht für Python 2 auch ein https://github.com/mcmtroffaes/pathlib2[backport zur Verfügung.

Zeit zum Handeln: Lassen Sie uns sehen, wie + pathlib + in der Praxis funktioniert.

Pfade erstellen

Alles, was Sie wirklich wissen müssen, ist die Klasse + pathlib.Path . Es gibt verschiedene Möglichkeiten, einen Pfad zu erstellen. Zunächst gibt es https://realpython.com/instance-class-and-static-methods-demystified/[classmethods wie] ` .cwd () ` (Current Working Directory) und ` .home () + `(das Home-Verzeichnis Ihres Benutzers):

>>>

>>> import pathlib
>>> pathlib.Path.cwd()
PosixPath('/home/gahjelle/realpython/')

_ Hinweis: In diesem Tutorial wird davon ausgegangen, dass "+ pathlib " importiert wurde, ohne " import pathlib " wie oben zu buchstabieren. Da Sie hauptsächlich die Klasse " Path " verwenden, können Sie auch "" aus dem pathlib-Import "Path " ausführen und " Path " anstelle von " pathlib.Path +" schreiben. _

Ein Pfad kann auch explizit aus seiner Zeichenfolgendarstellung erstellt werden:

>>>

>>> pathlib.Path(r'C:\Users\gahjelle\realpython\file.txt')
WindowsPath('C:/Users/gahjelle/realpython/file.txt')

Ein kleiner Tipp für den Umgang mit Windows-Pfaden: Unter Windows ist das Pfadtrennzeichen ein Backslash, "+ \ ". In vielen Kontexten wird Backslash jedoch auch als _escape-Zeichen_ verwendet, um nicht druckbare Zeichen darzustellen. Um Probleme zu vermeiden, verwenden Sie _raw string literals_, um Windows-Pfade darzustellen. Dies sind Zeichenfolgenliterale, denen ein " r " vorangestellt ist. In rohen String-Literalen steht das " \ " für einen wörtlichen Backslash: " r’C: \ Users" + ".

Eine dritte Möglichkeit, einen Pfad zu erstellen, besteht darin, die Teile des Pfads mit dem speziellen Operator "/" zu verbinden. Der Vorwärts-Schrägstrich-Operator wird unabhängig vom tatsächlichen Pfadtrennzeichen auf der Plattform verwendet:

>>>

>>> pathlib.Path.home()/'python'/'scripts'/'test.py'
PosixPath('/home/gahjelle/python/scripts/test.py')

Das / kann mehrere Pfade oder eine Mischung aus Pfaden und Zeichenfolgen (wie oben) verbinden, solange mindestens ein + Path + Objekt vorhanden ist. Wenn Ihnen die spezielle / Notation nicht gefällt, können Sie dasselbe mit der Methode + .joinpath () + tun:

>>>

>>> pathlib.Path.home().joinpath('python', 'scripts', 'test.py')
PosixPath('/home/gahjelle/python/scripts/test.py')

Beachten Sie, dass in den vorhergehenden Beispielen die + pathlib.Path + entweder durch eine + WindowsPath + oder eine + PosixPath + dargestellt wird. Das tatsächliche Objekt, das den Pfad darstellt, hängt vom zugrunde liegenden Betriebssystem ab. (Das heißt, das Beispiel "+ WindowsPath " wurde unter Windows ausgeführt, während die Beispiele " PosixPath +" unter Mac oder Linux ausgeführt wurden.) Weitere Informationen finden Sie unter dem Abschnitt Link: # Betriebssystemunterschiede [Betriebssystemunterschiede] .

Dateien lesen und schreiben

Traditionell bestand die Möglichkeit, eine Datei in Python zu lesen oder zu schreiben, darin, die integrierte Funktion + open () + zu verwenden. Dies gilt weiterhin, da die Funktion + open () + + Path + Objekte direkt verwenden kann. Im folgenden Beispiel werden alle Header in einer Markdown-Datei gefunden und gedruckt:

path = pathlib.Path.cwd()/'test.md'
with open(path, mode='r') as fid:
    headers = [line.strip() for line in fid if line.startswith('#')]
print('\n'.join(headers))

Eine äquivalente Alternative besteht darin, "+ .open () " für das Objekt " Path +" aufzurufen:

with path.open(mode='r') as fid:
    ...

Tatsächlich ruft + Path.open () + das eingebaute + open () + hinter den Kulissen auf. Welche Option Sie verwenden, ist hauptsächlich Geschmackssache.

Zum einfachen Lesen und Schreiben von Dateien gibt es in der Bibliothek + pathlib + einige praktische Methoden:

  • + .read_text () +: Öffnen Sie den Pfad im Textmodus und geben Sie den Inhalt als Zeichenfolge zurück.

  • + .read_bytes () +: Öffne den Pfad im Binär-/Bytemodus und gib den Inhalt als Bytestring zurück.

  • + .write_text () +: Öffne den Pfad und schreibe String-Daten hinein.

  • + .write_bytes () +: Öffne den Pfad im Binär-/Bytemodus und schreibe Daten in ihn.

Jede dieser Methoden behandelt das Öffnen und Schließen der Datei und macht sie so einfach zu verwenden, zum Beispiel:

>>>

>>> path = pathlib.Path.cwd()/'test.md'
>>> path.read_text()
<the contents of the test.md-file>

Pfade können auch als einfache Dateinamen angegeben werden. In diesem Fall werden sie relativ zum aktuellen Arbeitsverzeichnis interpretiert. Das folgende Beispiel entspricht dem vorherigen:

>>>

>>> pathlib.Path('test.md').read_text()
<the contents of the test.md-file>

Die Methode + .resolve () + findet den vollständigen Pfad. Im Folgenden bestätigen wir, dass das aktuelle Arbeitsverzeichnis für einfache Dateinamen verwendet wird:

>>>

>>> path = pathlib.Path('test.md')
>>> path.resolve()
PosixPath('/home/gahjelle/realpython/test.md')
>>> path.resolve().parent == pathlib.Path.cwd()
False

Beachten Sie, dass beim Vergleich von Pfaden deren Darstellungen verglichen werden. Im obigen Beispiel ist "+ path.parent " nicht gleich " pathlib.Path.cwd () ", da " path.parent " durch "" dargestellt wird. "" Während " pathlib.Path" .cwd () + wird durch + '/home/gahjelle/realpython/' + `dargestellt.

Komponenten eines Pfades auswählen

Die verschiedenen Teile eines Pfades sind bequem als Eigenschaften verfügbar. Grundlegende Beispiele sind:

  • + .name +: Der Dateiname ohne Verzeichnis

  • + .parent +: das Verzeichnis, das die Datei enthält, oder das übergeordnete Verzeichnis, wenn path ein Verzeichnis ist

  • + .stem +: Der Dateiname ohne Suffix

  • + .suffix +: die Dateierweiterung

  • + .anchor +: der Teil des Pfades vor den Verzeichnissen

Hier sind diese Eigenschaften in Aktion:

>>>

>>> path
PosixPath('/home/gahjelle/realpython/test.md')
>>> path.name
'test.md'
>>> path.stem
'test'
>>> path.suffix
'.md'
>>> path.parent
PosixPath('/home/gahjelle/realpython')
>>> path.parent.parent
PosixPath('/home/gahjelle')
>>> path.anchor
'/'

Beachten Sie, dass + .parent + ein neues + Path + Objekt zurückgibt, während die anderen Eigenschaften Zeichenfolgen zurückgeben. Dies bedeutet zum Beispiel, dass "+ .parent " wie im letzten Beispiel verkettet oder sogar mit "/+" kombiniert werden kann, um völlig neue Pfade zu erstellen:

>>>

>>> path.parent.parent/('new' + path.suffix)
PosixPath('/home/gahjelle/new.md')

Das ausgezeichnete Pathlib Cheatsheet bietet eine visuelle Darstellung dieser und anderer Eigenschaften und Methoden.

Dateien verschieben und löschen

Über + pathlib + haben Sie auch Zugriff auf grundlegende Vorgänge auf Dateisystemebene wie das Verschieben, Aktualisieren und sogar Löschen von Dateien. Meistens geben diese Methoden keine Warnung aus und warten nicht auf Bestätigung, bevor Informationen oder Dateien verloren gehen. Seien Sie vorsichtig, wenn Sie diese Methoden anwenden.

Verwenden Sie zum Verschieben einer Datei + .replace () +. Beachten Sie, dass + .replace () + es überschreibt, wenn das Ziel bereits vorhanden ist. Leider unterstützt + pathlib + das sichere Verschieben von Dateien nicht explizit. Um zu vermeiden, dass der Zielpfad möglicherweise überschrieben wird, testen Sie am einfachsten, ob das Ziel vorhanden ist, bevor Sie es ersetzen:

if not destination.exists():
    source.replace(destination)

Dies lässt jedoch die Tür für eine mögliche Rennbedingung offen. Ein anderer Prozess kann eine Datei am Pfad "+ Ziel " zwischen der Ausführung der Anweisung " if " und der Methode " .replace () +" hinzufügen. Wenn dies ein Problem darstellt, können Sie den Zielpfad für exclusive create sicherer öffnen und die Quelldaten explizit kopieren:

with destination.open(mode='xb') as fid:
    fid.write(source.read_bytes())

Der obige Code löst einen "+ FileExistsError " aus, wenn " Ziel " bereits vorhanden ist. Technisch kopiert dies eine Datei. Um eine Verschiebung durchzuführen, löschen Sie einfach " Quelle +", nachdem der Kopiervorgang abgeschlossen ist (siehe unten). Stellen Sie sicher, dass keine Ausnahme ausgelöst wurde.

Wenn Sie Dateien umbenennen, können nützliche Methoden "+ .with_name () " und " .with_suffix () +" sein. Beide geben den ursprünglichen Pfad zurück, wobei jedoch der Name bzw. das Suffix ersetzt wird.

Zum Beispiel:

>>>

>>> path
PosixPath('/home/gahjelle/realpython/test001.txt')
>>> path.with_suffix('.py')
PosixPath('/home/gahjelle/realpython/test001.py')
>>> path.replace(path.with_suffix('.py'))

Verzeichnisse und Dateien können mit + .rmdir () + bzw. + .unlink () + gelöscht werden. (Wieder vorsichtig sein!)

Beispiele

In diesem Abschnitt sehen Sie einige Beispiele, wie Sie mit "+ pathlib +" einfache Herausforderungen bewältigen können.

Dateien zählen

Es gibt verschiedene Möglichkeiten, viele Dateien aufzulisten. Am einfachsten ist die Methode "+ .iterdir () ", die alle Dateien im angegebenen Verzeichnis durchläuft. Im folgenden Beispiel wird ` .iterdir () ` mit der Klasse ` collection.Counter +` kombiniert, um zu zählen, wie viele Dateien von jedem Dateityp im aktuellen Verzeichnis vorhanden sind:

>>>

>>> import collections
>>> collections.Counter(p.suffix for p in pathlib.Path.cwd().iterdir())
Counter({'.md': 2, '.txt': 4, '.pdf': 2, '.py': 1})

Flexiblere Dateilisten können mit den Methoden + .glob () + und + .rglob () + (rekursiver Glob) erstellt werden. Beispielsweise gibt + pathlib.Path.cwd (). Glob ('*. Txt') + alle Dateien mit dem Suffix + .txt + im aktuellen Verzeichnis zurück. Im Folgenden werden nur Dateitypen gezählt, die mit + p + beginnen:

>>>

>>> import collections
>>> collections.Counter(p.suffix for p in pathlib.Path.cwd().glob('*.p*'))
Counter({'.pdf': 2, '.py': 1})

Zeigen Sie einen Verzeichnisbaum an

Das nächste Beispiel definiert eine Funktion, + tree () +, die einen visuellen Baum druckt, der die Dateihierarchie darstellt und in einem bestimmten Verzeichnis verwurzelt ist. Hier möchten wir auch Unterverzeichnisse auflisten, daher verwenden wir die Methode + .rglob () +:

def tree(directory):
    print(f'+ {directory}')
    for path in sorted(directory.rglob('*')):
        depth = len(path.relative_to(directory).parts)
        spacer = '    ' * depth
        print(f'{spacer}+ {path.name}')

Beachten Sie, dass wir wissen müssen, wie weit eine Datei vom Stammverzeichnis entfernt ist. Dazu verwenden wir zuerst + .relative_to () +, um einen Pfad relativ zum Stammverzeichnis darzustellen. Dann zählen wir die Anzahl der Verzeichnisse (unter Verwendung der Eigenschaft + .parts +) in der Darstellung. Beim Ausführen erstellt diese Funktion einen visuellen Baum wie den folgenden:

>>>

>>> tree(pathlib.Path.cwd())
+/home/gahjelle/realpython
    + directory_1
        + file_a.md
    + directory_2
        + file_a.md
        + file_b.pdf
        + file_c.py
    + file_1.txt
    + file_2.txt

_ Hinweis: f-strings funktioniert nur in Python 3.6 und höher. In älteren Pythons kann der Ausdruck "+ f" {Spacer} + {Pfadname} "" als "" {0} + {1} "geschrieben werden. Format (Spacer, Pfadname) +". _

Suchen Sie die zuletzt geänderte Datei

Die Methoden + .iterdir () +, + .glob () + und + .rglob () + eignen sich hervorragend für Generatorausdrücke und Listenverständnisse. Um die Datei in einem Verzeichnis zu finden, das zuletzt geändert wurde, können Sie die Methode + .stat () + verwenden, um Informationen zu den zugrunde liegenden Dateien abzurufen. Zum Beispiel gibt + .stat (). St_mtime + den Zeitpunkt der letzten Änderung einer Datei an:

>>>

>>> from datetime import datetime
>>> time, file_path = max((f.stat().st_mtime, f) for f in directory.iterdir())
>>> print(datetime.fromtimestamp(time), file_path)
2018-03-23 19:23:56.977817/home/gahjelle/realpython/test001.txt

Sie können sogar den Inhalt der zuletzt geänderten Datei mit einem ähnlichen Ausdruck abrufen:

>>>

>>> max((f.stat().st_mtime, f) for f in directory.iterdir())[1].read_text()
<the contents of the last modified file in directory>

Der von den verschiedenen Eigenschaften "+ .stat (). St_ " zurückgegebene Zeitstempel repräsentiert Sekunden seit dem 1. Januar 1970. Zusätzlich zu " datetime.fromtimestamp " kann " time.localtime " oder " time.ctime +" verwendet werden, um den Zeitstempel in einen benutzerfreundlicheren zu konvertieren.

Erstellen Sie einen eindeutigen Dateinamen

Das letzte Beispiel zeigt, wie ein eindeutiger nummerierter Dateiname basierend auf einer Vorlage erstellt wird. Geben Sie zunächst ein Muster für den Dateinamen mit Platz für einen Zähler an. Überprüfen Sie dann das Vorhandensein des Dateipfads, der durch Verbinden eines Verzeichnisses erstellt wurde, und den Dateinamen (mit einem Wert für den Zähler). Wenn es bereits vorhanden ist, erhöhen Sie den Zähler und versuchen Sie es erneut:

def unique_path(directory, name_pattern):
    counter = 0
    while True:
        counter += 1
        path = directory/name_pattern.format(counter)
        if not path.exists():
            return path

path = unique_path(pathlib.Path.cwd(), 'test{:03d}.txt')

Wenn das Verzeichnis bereits die Dateien "+ test001.txt " und " test002.txt " enthält, setzt der obige Code " path " auf " test003.txt +".

Betriebssystemunterschiede

Zuvor haben wir festgestellt, dass bei der Instanziierung von "+ pathlib.Path " entweder ein " WindowsPath " - oder ein " PosixPath +" - Objekt zurückgegeben wurde. Die Art des Objekts hängt vom verwendeten Betriebssystem ab. Diese Funktion macht es ziemlich einfach, plattformübergreifenden kompatiblen Code zu schreiben. Es ist möglich, explizit nach einem + WindowsPath + oder einem + PosixPath + zu fragen, aber Sie beschränken Ihren Code nur ohne Vorteile auf dieses System. Ein solcher konkreter Pfad kann nicht auf einem anderen System verwendet werden:

>>>

>>> pathlib.WindowsPath('test.md')
NotImplementedError: cannot instantiate 'WindowsPath' on your system

Es kann vorkommen, dass Sie eine Darstellung eines Pfads ohne Zugriff auf das zugrunde liegende Dateisystem benötigen (in diesem Fall kann es auch sinnvoll sein, einen Windows-Pfad auf einem Nicht-Windows-System darzustellen oder umgekehrt). Dies kann mit + PurePath + Objekten erfolgen. Diese Objekte unterstützen die im Link beschriebenen Vorgänge: # Auswählen von Komponenten eines Pfads [Abschnitt über Pfadkomponenten], jedoch nicht die Methoden, die auf das Dateisystem zugreifen:

>>>

>>> path = pathlib.PureWindowsPath(r'C:\Users\gahjelle\realpython\file.txt')
>>> path.name
'file.txt'
>>> path.parent
PureWindowsPath('C:/Users/gahjelle/realpython')
>>> path.exists()
AttributeError: 'PureWindowsPath' object has no attribute 'exists'

Sie können + PureWindowsPath + oder + PurePosixPath + auf allen Systemen direkt instanziieren. Durch das Instanziieren von "+ PurePath +" wird je nach verwendetem Betriebssystem eines dieser Objekte zurückgegeben.

Pfade als richtige Objekte

Im Link: # the-problem-with-python-file-path-handle [Einführung] haben wir kurz festgestellt, dass Pfade keine Zeichenfolgen sind und eine Motivation hinter + pathlib + darin besteht, das Dateisystem mit den richtigen Objekten darzustellen. Tatsächlich trägt die offizielle Dokumentation von + pathlib + den Titel ` + pathlib + `- Objektorientierte Dateisystempfade. Der Object-oriented Ansatz ist in den obigen Beispielen bereits deutlich sichtbar (insbesondere, wenn Sie ihn mit der alten Vorgehensweise "+ os.path +" vergleichen ). Lassen Sie mich Sie jedoch mit ein paar anderen Leckerbissen verlassen.

Unabhängig vom verwendeten Betriebssystem werden Pfade im Posix-Stil dargestellt, wobei der Schrägstrich als Pfadtrennzeichen dient. Unter Windows sehen Sie ungefähr Folgendes:

>>>

>>> pathlib.Path(r'C:\Users\gahjelle\realpython\file.txt')
WindowsPath('C:/Users/gahjelle/realpython/file.txt')

Wenn ein Pfad in eine Zeichenfolge konvertiert wird, wird das native Formular verwendet, z. B. mit Backslashes unter Windows:

>>>

>>> str(pathlib.Path(r'C:\Users\gahjelle\realpython\file.txt'))
'C:\\Users\\gahjelle\\realpython\\file.txt'

Dies ist besonders nützlich, wenn Sie eine Bibliothek verwenden, die nicht weiß, wie mit + pathlib.Path + Objekten umzugehen ist. Dies ist ein größeres Problem bei Python-Versionen vor 3.6. In Python 3.5 kann beispielsweise https://docs.python.org/3/library/configparser.html [die + configparser + Standardbibliothek] nur Zeichenfolgenpfade zum Lesen von Dateien verwenden. Um solche Fälle zu behandeln, müssen Sie die Konvertierung in eine Zeichenfolge explizit durchführen:

>>>

>>> from configparser import ConfigParser
>>> path = pathlib.Path('config.txt')
>>> cfg = ConfigParser()
>>> cfg.read(path)                     # Error on Python < 3.6
TypeError: 'PosixPath' object is not iterable
>>> cfg.read(str(path))                # Works on Python >= 3.4
['config.txt']

In Python 3.6 und höher wird empfohlen, "+ os.fspath () " anstelle von " str () +" zu verwenden, wenn Sie eine explizite Konvertierung durchführen müssen. Dies ist etwas sicherer, da es zu einem Fehler kommt, wenn Sie versehentlich versuchen, ein Objekt zu konvertieren, das nicht pathlike ist.

Möglicherweise ist der ungewöhnlichste Teil der Bibliothek "+ pathlib " die Verwendung des Operators "/". Lassen Sie uns für einen kleinen Blick unter die Haube sehen, wie dies umgesetzt wird. Dies ist ein Beispiel für die Überladung von Operatoren: Das Verhalten eines Operators wird je nach Kontext geändert. Sie haben das schon einmal gesehen. Überlegen Sie, wie "++" verschiedene Dinge für Zeichenfolgen und Zahlen bedeutet. Python implementiert das Überladen von Operatoren mithilfe von double underscore-Methoden (a.k.a. dunder Methoden).

Der Operator / wird durch die Methode + . truediv () + definiert. Wenn Sie sich den https://github.com/python/cpython/blob/master/Lib/pathlib.py [Quellcode von + pathlib +] ansehen, sehen Sie tatsächlich Folgendes:

class PurePath(object):

    def __truediv__(self, key):
        return self._make_child((key,))

Fazit

Seit Python 3.4 ist + pathlib + in der Standardbibliothek verfügbar. Mit + pathlib + können Dateipfade durch richtige + Path + Objekte anstelle von einfachen Zeichenfolgen wie zuvor dargestellt werden. Diese Objekte erstellen Code für Dateipfade:

  • Einfacher zu lesen, insbesondere weil "/" zum Verbinden von Pfaden verwendet wird

  • Leistungsstärker, da die meisten erforderlichen Methoden und Eigenschaften direkt auf dem Objekt verfügbar sind

  • Betriebssystemübergreifender konsistenter, da die Besonderheiten der verschiedenen Systeme durch das Objekt "+ Pfad +" verborgen werden

In diesem Tutorial haben Sie gesehen, wie Sie "+ Pfad +" - Objekte erstellen, Dateien lesen und schreiben, Pfade und das zugrunde liegende Dateisystem bearbeiten sowie einige Beispiele für das Durchlaufen vieler Dateipfade.

*Kostenloser PDF-Download:* https://realpython.com/bonus/python-cheat-sheet-short/[Python 3 Cheat Sheet]