Wie erhalte ich den Dateinamen ohne die Erweiterung von einem Pfad in Python?
994
Abrufen des Dateinamens ohne Erweiterung:
import os
print(os.path.splitext("/path/to/some/file.txt")[0])
Drucke:
/path/to/some/file
Dokumentation füros.path.splitext
.
Wichtiger Hinweis: Wenn der Dateiname mehrere Punkte enthält, wird nur die Erweiterung nach dem letzten entfernt. Zum Beispiel:
import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])
Drucke:
/path/to/some/file.txt.zip
Weitere Antworten finden Sie unten, wenn Sie diesen Fall behandeln müssen.
splitext('kitty.jpg.zip')
gibt es('kitty.jpg', '.zip')
).splitext(basename('/some/path/to/file.txt'))[0]
(was ich immer zu tun scheine)Sie können Ihre eigenen machen mit:
Wichtiger Hinweis: Wenn
.
der Dateiname mehr als einen enthält , wird nur der letzte entfernt. Zum Beispiel:Weitere Antworten finden Sie weiter unten.
quelle
os
.Verwendung
pathlib
in Python 3.4+wird zurückkehren
quelle
os.path
Lösungen nur eine Erweiterung entfernt (odersuffix
, wiepathlib
es heißt).Path('a.b.c').stem == 'a.b'
Path(Path('a.b.c').stem).stem
.with_suffix('')
ist der richtige Weg. Sie möchten wahrscheinlich bis schleifenp.suffix == ''
.quelle
`
den Code und "/somepath/hermanth.txt" als Pfadinstanz anzeigen können.os.path.basename
nicht erforderlich ist.os.path.basename
sollte nur verwendet werden, um den Dateinamen aus dem Dateipfad abzurufen.In Python 3.4+ können Sie die
pathlib
Lösung verwendenquelle
resolve()
den Weg? Ist es wirklich möglich, einen Pfad zu einer Datei abzurufen, ohne dass der Dateiname ohne diesen Teil des Pfads ist? Dies bedeutet, dass Sie den Dateinamen (ohne die Erweiterung) der Datei zurückgeben, auf die der Symlink verweist, wenn Sie einen Pfad zu symlink angeben.resolve()
ist die Lösung des Problems mit mehreren Punkten. Die folgende Antwort zur Verwendung des Index funktioniert nicht, wenn der Pfad "./foo.tar.gz" lautethttps://docs.python.org/3/library/os.path.html
In Python 3 pathlib "Das pathlib-Modul bietet übergeordnete Pfadobjekte." damit,
quelle
Wenn Sie den Pfad zur Datei beibehalten und einfach die Erweiterung entfernen möchten
quelle
'/root/dir/sub.exten/file.data.1.2.dat'.rsplit('.', 1)
os.path.splitext () funktioniert nicht , wenn die Erweiterung mehrere Punkte enthält.
Zum Beispiel images.tar.gz
Sie können einfach den Index des ersten Punkts im Basisnamen finden und dann den Basisnamen in Scheiben schneiden, um nur den Dateinamen ohne Erweiterung zu erhalten.
quelle
.tar.gz
.tar.bz
.tar.7z
'haystack'.index('needle')
eine ValueError-Ausnahme ausgelöst wird, wenn die Nadel (im obigen Fall der Punkt.
) nicht im Heuhaufen gefunden wird. Es gibt auch Dateien ohne Erweiterung.@ IceAdor's bezieht sich in einem Kommentar zur Lösung von @ user2902201 auf rsplit. rsplit ist die einfachste Lösung, die mehrere Perioden unterstützt.
Hier ist es geschrieben:
mein Bericht
quelle
import os
und dann verwendenos.path.basename
import
ingos
bedeutet nicht, dass Sieos.foo
ohne Bezugnahme verwenden könnenos
.quelle
from os import foo
.os
Moduls, wenn ein Mitglied aufgerufen wirdfoo
.path
, oderwalk
).Ich dachte, ich würde eine Variation der Verwendung von os.path.splitext einfügen ohne die Array-Indizierung verwenden zu müssen.
Die Funktion gibt immer ein
(root, ext)
Paar zurück, sodass die Verwendung sicher ist:root, ext = os.path.splitext(path)
Beispiel:
quelle
Die anderen Methoden entfernen nicht mehrere Erweiterungen. Einige haben auch Probleme mit Dateinamen, die keine Erweiterungen haben. Dieses Snippet behandelt beide Instanzen und funktioniert sowohl in Python 2 als auch in Python 3. Es übernimmt den Basisnamen aus dem Pfad, teilt den Wert in Punkte auf und gibt den ersten zurück, der der erste Teil des Dateinamens ist.
Hier sind einige Beispiele:
In jedem Fall lautet der gedruckte Wert:
quelle
Path('/path/to/file.txt').stem
. (1,23μs vs 8,39μs)import os
Dies gibt das
filename
ohneextension
(C: \ Benutzer \ Öffentlich \ Videos \ Beispielvideos \ Wildlife) zurück.Jetzt können Sie nur die
filename
von der Zeit mit bekommenquelle
Ein Verfahren mit mehreren Erweiterungen. Funktioniert für
str
undunicode
Pfade. Funktioniert in Python 2 und 3.Verhalten:
quelle
quelle
Auf dem Windows-System habe ich auch das Präfix für den Treibernamen verwendet, z.
Da ich keinen Laufwerksbuchstaben oder Verzeichnisnamen benötige, verwende ich:
quelle
Zur Vereinfachung eine einfache Funktion, die die beiden Methoden umschließt
os.path
:Getestet mit Python 3.5.
quelle
Der einfachste Weg, dies zu beheben, ist zu
Dies spart Ihnen Zeit und Rechenaufwand.
quelle
Sehr sehr sehr einfach keine anderen Module !!!
quelle
Wir könnten etwas Einfaches
split
/pop
Magisches tun, wie hier zu sehen ( https://stackoverflow.com/a/424006/1250044 ), um den Dateinamen zu extrahieren (unter Berücksichtigung der Windows- und POSIX-Unterschiede).quelle
quelle
Import os Dateiname, file_extension = os.path.splitext ('/ d1 / d2 / example.cs') Dateiname ist '/ d1 / d2 / Beispiel' file_extension ist '.cs'
quelle