Wie erhalte ich den Dateinamen ohne die Erweiterung aus einem Pfad in Python?
"/path/to/some/file.txt" "file"
Wie erhalte ich den Dateinamen ohne die Erweiterung aus einem Pfad in Python?
"/path/to/some/file.txt" "file"
https://docs.python.org/3/library/os.path.html
In Python 3 pathlib "Das pathlib-Modul bietet High-Level-Pfadobjekte." also,
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> p.with_suffix('')
WindowsPath('/a/b/c')
>>> p.stem
'c'
Dies ist die beste Python 3 Lösung für den allgemeinen Fall des Entfernens der Erweiterung aus einem vollständigen Pfad. Mit stem wird auch der übergeordnete Pfad entfernt. Falls Sie eine doppelte Erweiterung erwarten (wie z.B. bla.tar.gz), können Sie sie sogar zweimal verwenden: p.with_suffix('').with_suffix('').
Os.path.splitext() wird nicht funktionieren, wenn die Erweiterung mehrere Punkte enthält.
Zum Beispiel: images.tar.gz
>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> print os.path.splitext(file_name)[0]
images.tar
Sie können einfach den Index des ersten Punktes im Basisnamen finden und dann den Basisnamen zerschneiden, um nur den Dateinamen ohne Erweiterung zu erhalten.
>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> index_of_dot = file_name.index('.')
>>> file_name_without_extension = file_name[:index_of_dot]
>>> print file_name_without_extension
images
Index_of_dot = dateiname.index('.') Dies wird nach der Ermittlung des Basisnamens der Datei durchgeführt, damit sie nicht an .env geteilt wird
Dies ist ein wichtiger Punkt, denn eine solche Reihe von Verlängerungen ist üblich. .tar.gz
.tar.bz
.tar.7z
Beachten Sie, dass 'haystack'.index('needle')
löst eine ValueError-Ausnahme aus, wenn die Nadel (im obigen Fall der Punkt, .
) ist nicht im Heuhaufen zu finden. Es gibt auch Dateien ohne jegliche Erweiterung.
Wie in den Kommentaren zu anderen Pathlib-Antworten erwähnt, kann es schwierig sein, mehrere Suffixe zu handhaben. Zwei oder weniger Suffixe sind nicht so schlecht zu handhaben mit .with_suffix('')
y .stem
.
from pathlib import Path
pth = Path('foo/bar/baz.baz/thefile.tar.gz')
fn = pth.with_suffix('').stem
print(fn) # thefile
Wenn es mehr als zwei Suffixe geben kann, können Sie eine Schleife verwenden, um den allgemeinen Fall zu behandeln, dass es 0, 1 oder viele Suffixe geben kann.
pth = Path('foo/bar/baz/thefile.tar.gz.bz.7zip')
pth.name # 'thefile.tar.gz.bz.7zip'
pth.suffixes # ['.tar', '.gz', '.bz', '.7zip']
also
fn = pth.name
for s in pth.suffixes:
fn = fn.rsplit(s)[0]
print(fn) # thefile
o
fnp = Path(pth.name)
for _ in fnp.suffixes:
fnp = fnp.with_suffix('')
print(fnp) # thefile
Hier ist zu beachten, dass fnp
ein Pfad ist, während fn
ist eine Zeichenkette, die die bevorzugte Form der Schleife bestimmen kann.
Könnte die Erweiterung zum Beispiel lauten .tar
, .tar.gz
, .tar.gz.bz
usw.; Sie können einfach rsplit
die bekannte Erweiterung und nehmen Sie das erste Element:
pth = Path('foo/bar/baz.baz/thefile.tar.gz')
fn = pth.name.rsplit('.tar')[0]
print(fn) # thefile
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.