1724 Stimmen

Wie erhalte ich den Dateinamen ohne die Erweiterung aus einem Pfad in Python?

Wie erhalte ich den Dateinamen ohne die Erweiterung aus einem Pfad in Python?

"/path/to/some/file.txt"    "file"

1840voto

Geo Punkte 89102

Ermittelt den Namen der Datei ohne die Erweiterung:

import os
print(os.path.splitext("/path/to/some/file.txt")[0])

Drucke:

/path/to/some/file

Dokumentation für os.path.splitext .

Wichtiger Hinweis: Wenn der Dateiname mehrere Punkte enthält, wird nur die Erweiterung nach dem letzten Punkt entfernt. Zum Beispiel:

import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])

Drucke:

/path/to/some/file.txt.zip

Siehe andere Antworten unten, wenn Sie diesen Fall behandeln müssen.

33 Stimmen

Wenn dieser Vorgang häufig genug vorkommt, sollte er vielleicht einen eigenen offiziellen Befehl erhalten. So etwas wie os.path.filename(path_to_file) anstelle von os.path.splitext(os.path.basename(path_to_file))[0]

28 Stimmen

Was ist, wenn der Dateiname mehrere Punkte enthält?

119 Stimmen

Für alle, die sich dasselbe fragen wie matteok: Wenn es mehrere Punkte gibt, teilt sich splitext am letzten Punkt auf (also splitext('kitty.jpg.zip') gibt ('kitty.jpg', '.zip') ).

1321voto

mxdbld Punkte 12569

Utilice .stem de pathlib in Python 3.4+

from pathlib import Path

Path('/root/dir/sub/file.ext').stem

wird zurückgegeben

'file'

Wenn Ihre Datei mehrere Erweiterungen hat, beachten Sie, dass .stem wird nur die letzte Erweiterung entfernt. Zum Beispiel, Path('file.tar.gz').stem wird zurückgegeben 'file.tar' .

112 Stimmen

Dies ist der empfohlene Weg seit Python 3.

6 Stimmen

Beachten Sie, dass, wie os.path Lösungen, so wird nur eine Erweiterung entfernt (oder suffix als pathlib nennt es). Path('a.b.c').stem == 'a.b'

2 Stimmen

@BallpointBen wie kann man mehrere Suffixe optimal entfernen? Es muss doch einen besseren Weg geben als Path(Path('a.b.c').stem).stem

770voto

gimel Punkte 78080

Sie können Ihre eigenen mit machen:

>>> import os
>>> base=os.path.basename('/root/dir/sub/file.ext')
>>> base
'file.ext'
>>> os.path.splitext(base)
('file', '.ext')
>>> os.path.splitext(base)[0]
'file'

Wichtiger Hinweis: Wenn es mehr als eine . im Dateinamen, wird nur das letzte entfernt. Zum Beispiel:

/root/dir/sub/file.ext.zip -> file.ext

/root/dir/sub/file.ext.tar.gz -> file.ext.tar

Siehe unten für andere Antworten, die sich mit diesem Thema befassen.

279voto

hemanth.hm Punkte 4229
>>> print(os.path.splitext(os.path.basename("/path/to/file/hemanth.txt"))[0])
hemanth

9 Stimmen

+1 dafür. 3 exakt gleiche Antworten, aber diese ist die direkteste. Sie hätten einfach Folgendes verwenden können ` für die Anzeige des Codes und "/somepath/hermanth.txt" als Pfadinstanz.

2 Stimmen

@hemanth.hm Beachten Sie, dass Sie in dieser Erklärung angegeben haben, os.path.basename ist nicht erforderlich. os.path.basename sollte nur verwendet werden, um den Dateinamen aus dem Dateipfad zu ermitteln.

117voto

Morgoth Punkte 4497

In Python 3.4+ können Sie die pathlib solución

from pathlib import Path

print(Path(your_path).resolve().stem)

9 Stimmen

Warum tun Sie resolve() den Weg? Ist es wirklich möglich, einen Pfad zu einer Datei zu erhalten, ohne dass der Dateiname ein Teil des Pfades ist? Das bedeutet, dass Sie, wenn Sie einen Pfad zu einem Symlink angeben, den Dateinamen (ohne die Erweiterung) der Datei zurückgeben, auf die der Symlink zeigt.

3 Stimmen

Ein möglicher Grund für die Verwendung resolve() soll helfen, das Problem der vielen Punkte zu lösen. Die folgende Antwort über die Verwendung des Index funktioniert nicht, wenn der Pfad "./foo.tar.gz" lautet

CodeJaeger.com

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.

Powered by:

X