Wie erhalte ich den Dateinamen ohne die Erweiterung von einem Pfad in Python?
Wie erhalte ich den Dateinamen ohne die Erweiterung von einem Pfad in Python?
Antworten:
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:
>>> 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 .
der Dateiname mehr als einen enthält , wird nur der letzte entfernt. Zum Beispiel:
/root/dir/sub/file.ext.zip -> file.ext
/root/dir/sub/file.ext.tar.gz -> file.ext.tar
Weitere Antworten finden Sie weiter unten.
os
.
Verwendung pathlib
in Python 3.4+
from pathlib import Path
Path('/root/dir/sub/file.ext').stem
wird zurückkehren
'file'
os.path
Lösungen nur eine Erweiterung entfernt (oder suffix
, wie pathlib
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 schleifen p.suffix == ''
.
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
`
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 verwenden
from pathlib import Path
print(Path(your_path).resolve().stem)
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" lautet
https://docs.python.org/3/library/os.path.html
In Python 3 pathlib "Das pathlib-Modul bietet übergeordnete Pfadobjekte." damit,
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
Wenn Sie den Pfad zur Datei beibehalten und einfach die Erweiterung entfernen möchten
>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2
'/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
>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> print os.path.splitext(file_name)[0]
images.tar
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.
>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> index_of_dot = file_name.index('.')
>>> file_name_without_extension = file_name[:index_of_dot]
>>> print file_name_without_extension
images
'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.
Aber selbst wenn ich os importiere, kann ich es nicht path.basename nennen. Ist es möglich, es so direkt wie den Basisnamen aufzurufen?
import os
und dann verwenden os.path.basename
import
ing os
bedeutet nicht, dass Sie os.foo
ohne Bezugnahme verwenden können os
.
from os import foo
.
os
Moduls, wenn ein Mitglied aufgerufen wird foo
.
path
, oder walk
).
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:
>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
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.
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 sind einige Beispiele:
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 lautet der gedruckte Wert:
FileName
Path('/path/to/file.txt').stem
. (1,23μs vs 8,39μs)
import os
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
Dies gibt das filename
ohne extension
(C: \ Benutzer \ Öffentlich \ Videos \ Beispielvideos \ Wildlife) zurück.
temp = os.path.splitext(filename)[0]
Jetzt können Sie nur die filename
von der Zeit mit bekommen
os.path.basename(temp) #this returns just the filename (wildlife)
Ein Verfahren mit mehreren Erweiterungen. Funktioniert für str
und unicode
Pfade. 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'
import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
Auf dem Windows-System habe ich auch das Präfix für den Treibernamen verwendet, z.
>>> s = 'c:\\temp\\akarmi.txt'
>>> print(os.path.splitext(s)[0])
c:\temp\akarmi
Da ich keinen Laufwerksbuchstaben oder Verzeichnisnamen benötige, verwende ich:
>>> print(os.path.splitext(os.path.basename(s))[0])
akarmi
Zur Vereinfachung eine einfache Funktion, die die beiden Methoden umschließt 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.
Der einfachste Weg, dies zu beheben, ist zu
import ntpath
print('Base name is ',ntpath.basename('/path/to/the/file/'))
Dies spart Ihnen Zeit und Rechenaufwand.
Sehr sehr sehr einfach keine anderen Module !!!
import os
p = r"C:\Users\bilal\Documents\face Recognition python\imgs\northon.jpg"
# Get the filename only from the initial file path.
filename = os.path.basename(p)
# Use splitext() to get filename and extension separately.
(file, ext) = os.path.splitext(filename)
# Print outcome.
print("Filename without extension =", file)
print("Extension =", ext)
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).
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
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
Import os Dateiname, file_extension = os.path.splitext ('/ d1 / d2 / example.cs') Dateiname ist '/ d1 / d2 / Beispiel' file_extension ist '.cs'