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"
Ich dachte, ich füge eine Variante zur Verwendung der os.path.splitext ohne die Notwendigkeit einer Array-Indizierung zu verwenden.
Die Funktion gibt immer ein (root, ext)
Paar, so dass es sicher zu verwenden ist:
root, ext = os.path.splitext(path)
Exemple :
>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
Bei den anderen Methoden werden mehrere Erweiterungen nicht entfernt. Einige haben auch Probleme mit Dateinamen, die keine Erweiterungen haben. Dieses Snippet behandelt beide Fälle und funktioniert sowohl in Python 2 als auch 3. Es holt sich den Basisnamen aus dem Pfad, teilt den Wert in Punkte auf und gibt den ersten zurück, der den Anfangsteil des Dateinamens darstellt.
import os
def get_filename_without_extension(file_path):
file_basename = os.path.basename(file_path)
filename_without_extension = file_basename.split('.')[0]
return filename_without_extension
Hier eine Reihe von Beispielen, die Sie ausführen können:
example_paths = [
"FileName",
"./FileName",
"../../FileName",
"FileName.txt",
"./FileName.txt.zip.asc",
"/path/to/some/FileName",
"/path/to/some/FileName.txt",
"/path/to/some/FileName.txt.zip.asc"
]
for example_path in example_paths:
print(get_filename_without_extension(example_path))
In jedem Fall wird der Wert gedruckt:
FileName
Abgesehen von dem zusätzlichen Nutzen der Behandlung mehrerer Punkte ist diese Methode viel schneller als Path('/path/to/file.txt').stem
. (1,23s gegenüber 8.39s)
Ein Verfahren, das mehrere Erweiterungen berücksichtigt. Funktioniert für str
y unicode
Wege. Funktioniert in Python 2 und 3.
import os
def file_base_name(file_name):
if '.' in file_name:
separator_index = file_name.index('.')
base_name = file_name[:separator_index]
return base_name
else:
return file_name
def path_base_name(path):
file_name = os.path.basename(path)
return file_base_name(file_name)
Verhalten:
>>> path_base_name('file')
'file'
>>> path_base_name(u'file')
u'file'
>>> path_base_name('file.txt')
'file'
>>> path_base_name(u'file.txt')
u'file'
>>> path_base_name('file.tar.gz')
'file'
>>> path_base_name('file.a.b.c.d.e.f.g')
'file'
>>> path_base_name('relative/path/file.ext')
'file'
>>> path_base_name('/absolute/path/file.ext')
'file'
>>> path_base_name('Relative\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('C:\\Absolute\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('/path with spaces/file.ext')
'file'
>>> path_base_name('C:\\Windows Path With Spaces\\file.txt')
'file'
>>> path_base_name('some/path/file name with spaces.tar.gz.zip.rar.7z')
'file name with spaces'
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.