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"

26voto

Antonio Ramasco Punkte 351
import os
filename, file_extension =os.path.splitext(os.path.basename('/d1/d2/example.cs'))
  • Dateiname ist 'Beispiel'

  • file_extension ist '.cs'

'

1 Stimmen

Dies beantwortet die Frage des Auftraggebers

21voto

Devin Jeanpierre Punkte 87113

Aber selbst wenn ich os importiere, kann ich path.basename nicht aufrufen. Ist es möglich, ihn direkt als basename aufzurufen?

import os und verwenden Sie dann os.path.basename

import ing os bedeutet nicht, dass Sie die os.foo ohne Bezugnahme auf os .

2 Stimmen

Wenn Sie foo jedoch direkt aufrufen möchten, können Sie from os import foo .

1 Stimmen

Haben Sie eine sehr untypische Version des os Modul, wenn es ein Mitglied namens foo .

3 Stimmen

Es ist ein Platzhalter-Name. (z. B. betrachten path ou walk ).

21voto

ScottMcC Punkte 3576

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'

0 Stimmen

Os.path.splittext() ist Version 3.6+

14voto

Alan W. Smith Punkte 23071

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

0 Stimmen

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)

0 Stimmen

Dies funktioniert nicht für den Dateinamen nvdcve-1.1-2002.json.zip

0 Stimmen

Ich habe es auf fileBasename.split('.json')[0] aufgeteilt und es hat funktioniert

7voto

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.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