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"

2voto

esteban21 Punkte 139

Ich habe die Antworten gelesen, und ich stelle fest, dass es viele gute Lösungen gibt. Also, für diejenigen, die entweder (Name oder Erweiterung), hier geht eine andere Lösung, mit dem Betriebssystem-Modul Beide Methoden unterstützen Dateien mit mehreren Erweiterungen.

import os

def get_file_name(path):
    if not os.path.isdir(path):
        return os.path.splitext(os.path.basename(path))[0].split(".")[0]

def get_file_extension(path):
    extensions = []
    copy_path = path
    while True:
        copy_path, result = os.path.splitext(copy_path)
        if result != '':
            extensions.append(result)
        else:
            break
    extensions.reverse()
    return "".join(extensions)

Hinweis: Diese Lösung unter Windows unterstützt keine Dateinamen mit dem Zeichen "\".

1voto

Der einfachste Weg, dieses Problem zu lösen, ist

import ntpath 
print('Base name is ',ntpath.basename('/path/to/the/file/'))

Das spart Zeit und Berechnungsaufwand.

1voto

shivendra singh Punkte 29
import os
list = []
def getFileName( path ):
for file in os.listdir(path):
    #print file
    try:
        base=os.path.basename(file)
        splitbase=os.path.splitext(base)
        ext = os.path.splitext(base)[1]
        if(ext):
            list.append(base)
        else:
            newpath = path+"/"+file
            #print path
            getFileName(newpath)
    except:
        pass
return list

getFileName("/home/weexcel-java3/Desktop/backup")
print list

1voto

handle Punkte 5667

Der Einfachheit halber wird eine einfache Funktion, die die beiden Methoden aus os.path :

def filename(path):
  """Return file name without extension from path.

  See https://docs.python.org/3/library/os.path.html
  """
  import os.path
  b = os.path.split(path)[1]  # path, *filename*
  f = os.path.splitext(b)[0]  # *file*, ext
  #print(path, b, f)
  return f

Getestet mit Python 3.5.

1voto

yckart Punkte 29968

Wir könnten einige einfache split / pop Magie wie hier zu sehen ( https://stackoverflow.com/a/424006/1250044 ), um den Dateinamen zu extrahieren (unter Berücksichtigung der Unterschiede zwischen Windows und POSIX).

def getFileNameWithoutExtension(path):
  return path.split('\\').pop().split('/').pop().rsplit('.', 1)[0]

getFileNameWithoutExtension('/path/to/file-0.0.1.ext')
# => file-0.0.1

getFileNameWithoutExtension('\\path\\to\\file-0.0.1.ext')
# => file-0.0.1

0 Stimmen

Os.path.splitext()[0] bewirkt dasselbe.

0 Stimmen

@CharlesPlager os.path.splitext() funktioniert nicht, wenn mehrere Punkte in der Erweiterung enthalten sind. stackoverflow.com/a/37760212/1250044

0 Stimmen

Das funktioniert bei mir: In [72]: os.path.splitext('eins.zwei.drei.ext') Out[72]: ('eins.zwei.drei', '.ext')

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