In Python can SIE den Dateinamen (Basisnamen), den Verzeichnisnamen (Ordner) und die Erweiterung aus einer Pfadzeichenfolge abrufen oder die Zeichenfolgen verbinden, um die Pfadzeichenfolge mit dem Modul os.path in der Standardbibliothek zu generieren.
Dieser Artikel hat folgenden Inhalt.
- Unterschied im Pfadtrennzeichen nach Betriebssystem
- Holen Sie sich den Dateinamen (Basisname) aus einem Pfad:
os.path.basename()
- Dateiname mit Erweiterung
- Dateiname ohne Erweiterung
- Holen Sie sich den Namen des Verzeichnisses (Ordners) aus einem Pfad:
os.path.dirname()
- Rufen Sie das Datei- und Verzeichnisnamenpaar ab:
os.path.split()
- Hinweise dazu, wann eine Pfadzeichenfolge ein Verzeichnis angibt
- Holen Sie sich die Erweiterung:
os.path.splitext()
- Erstellen Sie eine Pfadzeichenfolge mit einer anderen Erweiterung
- Holen Sie sich die Erweiterung ohne Punkt (Punkt)
- Beispiele für Fälle wie .tar.gz
- Erstellen Sie eine Pfadzeichenfolge, indem Sie die Datei- und Verzeichnisnamen kombinieren:
os.path.join()
- Erstellen Sie eine Pfadzeichenfolge für eine andere Datei im selben Verzeichnis
- Verwenden Sie verschiedene Betriebssystemformate
- Beispiele für Windows
- Backslash und Raw-String
- Beispiele für das Abrufen von Dateinamen, Ordnernamen und Erweiterungen
- Holen Sie sich einen Laufwerksbuchstaben und treten Sie ihn bei:
os.path.splitdrive()
Verwenden Sie die folgende Pfadzeichenfolge als Beispiel.
import os
filepath = './dir/subdir/filename.ext'
Der folgende Beispielcode wird auf einem Mac ausgeführt. Am Ende werden Beispiele für Windows gezeigt.
In Python 3.4 oder höher can SIE auch den Dateinamen, den Verzeichnisnamen (Ordner), die Erweiterung usw. mit dem Modul pathlib abrufen, das Pfade als Objekte behandelt.
Unterschied im Pfadtrennzeichen nach Betriebssystem
Das Pfadtrennzeichen hängt vom Betriebssystem ab. UNIX (einschließlich Mac) used den Schrägstrich / und Windows den Schrägstrich umgekehrt als Trennzeichen.
Sie können das Trennzeichen im Betriebssystem, auf dem Python ausgeführt WIRD, mit os.sep oder os.path.sep abrufen.
print(os.sep)
# /
print(os.sep is os.path.sep)
# True
Holen Sie sich den Dateinamen (Basisname) aus einem Pfad:os.path.basename()
Verwenden Sie os.path.basename(), um den Dateinamen (basename) aus einer Pfadzeichenfolge zu erhalten.
Dateiname mit Erweiterung
os.path.basename() gibt den Dateinamen mit der Erweiterung zurück.
filepath = './dir/subdir/filename.ext'
basename = os.path.basename(filepath)
print(basename)
# filename.ext
print(type(basename))
# <class 'str'>
Dateiname ohne Erweiterung
Sie können den Dateinamen ohne die Erweiterung mit os.path.splitext() erhalten, das später beschrieben wird.
basename_without_ext = os.path.splitext(os.path.basename(filepath))[0]
print(basename_without_ext)
# filename
os.path.splitext() Split am letzten (rechten) Punkt .. If You am ersten (linken) Punkt splitten möchten ., SIE verwenden split().
filepath_tar_gz = './dir/subdir/filename.tar.gz'
print(os.path.splitext(os.path.basename(filepath_tar_gz))[0])
# filename.tar
print(os.path.basename(filepath_tar_gz).split('.', 1)[0])
# filename
Holen Sie sich den Namen des Verzeichnisses (Ordners) aus einem Pfad:os.path.dirname()
Verwenden Sie os.path.dirname(), um den Verzeichnisordner (Name) aus einer Pfadzeichenfolge abzurufen.
filepath = './dir/subdir/filename.ext'
dirname = os.path.dirname(filepath)
print(dirname)
# ./dir/subdir
print(type(dirname))
# <class 'str'>
Wenn Sie nur den Verzeichnisnamen direkt über der Datei erhalten möchten, verwenden Sie os.path.basename().
subdirname = os.path.basename(os.path.dirname(filepath))
print(subdirname)
# subdir
Rufen Sie das Datei- und Verzeichnisnamenpaar ab:os.path.split()
Verwenden Sie os.path.split(), um sowohl den Datei- als auch den Verzeichnisnamen (Ordner) zu erhalten.
os.path.split() gibt ein Tupel aus dem von os.path.basename() zurückgegebenen Dateinamen und dem von os.path.dirname() zurückgegebenen Verzeichnisnamen zurück.
filepath = './dir/subdir/filename.ext'
base_dir_pair = os.path.split(filepath)
print(base_dir_pair)
# ('./dir/subdir', 'filename.ext')
print(type(base_dir_pair))
# <class 'tuple'>
print(os.path.split(filepath)[0] == os.path.dirname(filepath))
# True
print(os.path.split(filepath)[1] == os.path.basename(filepath))
# True
Sie können Tupel entpacken, um sie jeder Variablen zuzuweisen.
dirname, basename = os.path.split(filepath)
print(dirname)
# ./dir/subdir
print(basename)
# filename.ext
Use SIE os.path.join(), das später beschrieben WIRD, um die Datei- und Verzeichnisnamen wieder zusammenzuführen.
Hinweise dazu, wann eine Pfadzeichenfolge ein Verzeichnis angibt
Beachten Sie, dass, wenn die Pfadzeichenfolge ein Verzeichnis (Ordner) angibt, das Ergebnis ist, je nachdem, ob am Ende unterschiedlich ein Trennzeichen steht.
Kein Trennzeichen am Ende:
dirpath_without_sep = './dir/subdir'
print(os.path.split(dirpath_without_sep))
# ('./dir', 'subdir')
print(os.path.basename(dirpath_without_sep))
# subdir
Wenn am Ende ein Trennzeichen steht, verwenden SIE os.path.dirname() und os.path.basename(), um den unteren Ordnernamen zu erhalten.
dirpath_with_sep = './dir/subdir/'
print(os.path.split(dirpath_with_sep))
# ('./dir/subdir', '')
print(os.path.basename(os.path.dirname(dirpath_with_sep)))
# subdir
Holen Sie sich die Erweiterung:os.path.splitext()
Verwenden Sie os.path.splitext(), um die Erweiterung zu erhalten.
os.path.splitext() teilt die Erweiterung und andere auf und gibt sie als Tupel zurück. Die Erweiterung enthält den Punkt ..
filepath = './dir/subdir/filename.ext'
root_ext_pair = os.path.splitext(filepath)
print(root_ext_pair)
# ('./dir/subdir/filename', '.ext')
print(type(root_ext_pair))
# <class 'tuple'>
Die Verkettung mit dem +-Operator gibt die ursprüngliche Pfadzeichenfolge zurück.
root, ext = os.path.splitext(filepath)
print(root)
# ./dir/subdir/filename
print(ext)
# .ext
path = root + ext
print(path)
# ./dir/subdir/filename.ext
Erstellen Sie eine Pfadzeichenfolge mit einer anderen Erweiterung
Um eine Pfadzeichenfolge zu erstellen, bei der nur die Erweiterung gegenüber dem Original geändert wurde, verketten SIE das erste Element des Tupels, das von os.path.splitext() zurückgegeben wird, mit einer beliebigen Erweiterung.
other_ext_filepath = os.path.splitext(filepath)[0] + '.jpg'
print(other_ext_filepath)
# ./dir/subdir/filename.jpg
Holen Sie sich die Erweiterung ohne Punkt (Punkt)
Wenn Sie die Erweiterung ohne den Punkt (Punkt) sterben. erhalten möchten, geben SIE die zweite und die folgenden Zeichenfolgen mit Slice [1:] an.
ext_without_dot = os.path.splitext(filepath)[1][1:]
print(ext_without_dot)
# ext
Beispiele für Fälle wie .tar.gz
Wie im obigen Beispiel gezeigt, wird os.path.splitext() am letzten (rechten) Punkt geteilt. Seien Sie vorsichtig mit Erweiterungen wie .tar.gz.
filepath_tar_gz = './dir/subdir/filename.tar.gz'
print(os.path.splitext(filepath_tar_gz))
# ('./dir/subdir/filename.tar', '.gz')
Wenn SIE nach dem ersten (linken) Punkt teilen möchten. Verwenden Sie im Dateinamen die Methode split() des Strings, aber es funktioniert nicht, wenn der Verzeichnisname auch den Punkt enthält.
print(filepath_tar_gz.split('.', 1))
# ['', '/dir/subdir/filename.tar.gz']
Wenden Sie nach dem Teilen mit os.path.split() die split()-Methode des Strings an und verbinden Sie ihn mit os.path.join(), das später beschrieben wird.
Der von split() zurückgegebene String enthält kein Trennzeichen, seien Sie also vorsichtig, wenn Sie eine Erweiterung mit einem Punkt erhalten möchten. wie os.path.splitext().
dirname, basename = os.path.split(filepath_tar_gz)
basename_without_ext, ext = basename.split('.', 1)
path_without_ext = os.path.join(dirname, basename_without_ext)
print(path_without_ext)
# ./dir/subdir/filename
print(ext)
# tar.gz
ext_with_dot = '.' + ext
print(ext_with_dot)
# .tar.gz
Erstellen Sie eine Pfadzeichenfolge, indem Sie die Datei- und Verzeichnisnamen kombinieren:os.path.join()
Sie os.path.join(), um Datei- und Verzeichnisnamen zu verbinden, um eine neue Pfadzeichenfolge zu erstellen.
path = os.path.join('dir', 'subdir', 'filename.ext')
print(path)
# dir/subdir/filename.ext
Erstellen Sie eine Pfadzeichenfolge für eine andere Datei im selben Verzeichnis
If SIE Eine Pfadzeichenfolge für Eine andere Datei im selben Verzeichnis Einer Datei erstellen möchten, verwenden SIE os.path.dirname() und os.path.join().
filepath = './dir/subdir/filename.ext'
other_filepath = os.path.join(os.path.dirname(filepath), 'other_file.ext')
print(other_filepath)
# ./dir/subdir/other_file.ext
Verwenden Sie verschiedene Betriebssystemformate
Wenn SIE Pfadzeichenfolgen in einem Betriebssystemformat bearbeiten möchten, das nicht das Betriebssystem IST, auf dem Python derzeit ausgeführt WIRD, importieren und verwenden Sie ein anderes Modul anstelle des os-Moduls.
- UNIX (einschließlich aktueller Mac):
posixpath
- Fenster:
ntpath
- Macintosh 9 und früher:
macpath
Da jedes Modul die gleiche Schnittstelle wie os.path hat, can SIE den os.path-Teil des bisherigen Beispielcodes in ihrem Modulnamen (z. B. ntpath) ändern.
Beispiele für Windows
Der folgende Beispielcode WIRD auf Einem Mac mit dem oben genannten ntpath-Modul ausgeführt. Unter Windows können Sie ntpath durch os.path ersetzen.
Backslash und Raw-String
Das Pfadtrennzeichen in Windows ist der Backslash .
Um einen umgekehrten Schrägstrich in eine Zeichenfolge zu schreiben, & SIE zwei Schrägstriche schreiben, um zu entkommen. print() gibt einen Backslash aus.
import ntpath
print(ntpath.sep)
#
print('\')
#
print(ntpath.sep is '\')
# True
Die Rohzeichenfolge (r’xxx‘) erleichtert das Schreiben eines Windows-Pfads, da SIE einen umgekehrten Strich so schreiben können, wie er ist. Ein Rohstring und ein normaler String haben den gleichen Wert.
file_path = 'c:\dir\subdir\filename.ext'
file_path_raw = r'c:dirsubdirfilename.ext'
print(file_path == file_path_raw)
# True
Weitere Informationen zu Rohzeichenfolgen finden Sie im following Artikel.
Beispiele für das Abrufen von Dateinamen, Ordnernamen und Erweiterungen
Es funktioniert auch unter Windows.
print(ntpath.basename(file_path))
# filename.ext
print(ntpath.dirname(file_path))
# c:dirsubdir
print(ntpath.split(file_path))
# ('c:\dir\subdir', 'filename.ext')
Holen Sie sich einen Laufwerksbuchstaben und treten Sie ihn bei:os.path.splitdrive()
Verwenden Sie os.path.splitdrive(), um den Laufwerksbuchstaben zu erhalten. Der folgende Beispielcode verwendet ntpath.splitdrive().
os.path.splitdrive() teilt den Laufwerksbuchstaben einschließlich des Doppelpunkts : und anderer.
print(ntpath.splitdrive(file_path))
# ('c:', '\dir\subdir\filename.ext')
Wenn Sie nur den Laufwerksbuchstaben erhalten möchten, wählen Sie das erste Zeichen aus.
drive_letter = ntpath.splitdrive(file_path)[0][0]
print(drive_letter)
# c
Sei vorsichtig, wenn du Drive-Charakteren beitrittst.
Wenn Sie es einfach an os.path.join() übergeben, funktioniert es nicht.
print(ntpath.join('c:', 'dir', 'subdir', 'filename.ext'))
# c:dirsubdirfilename.ext
Sie können auch os.sep (ntpath.sep im Beispielcode) im Argument von os.path.join() angeben oder dem Laufwerksbuchstaben ein Trennzeichen hinzufügen.
print(ntpath.join('c:', ntpath.sep, 'dir', 'subdir', 'filename.ext'))
# c:dirsubdirfilename.ext
print(ntpath.join('c:\', 'dir', 'subdir', 'filename.ext'))
# c:dirsubdirfilename.ext