Skip to content

Ermitteln des Dateinamens, des Verzeichnisses und der Erweiterung aus einer Pfadzeichenkette in Python

Python

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