Welchen Befehl sollte ich in Python verwenden, um den Namen des Ordners abzurufen, der die Datei enthält, mit der ich arbeite?
"C:\folder1\folder2\filename.xml"
Hier "folder2"
ist was ich bekommen möchte.
Das einzige, was ich mir ausgedacht habe, ist, es os.path.split
zweimal zu verwenden :
folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]
Gibt es einen besseren Weg, dies zu tun?
python
python-3.x
directory
Vasily
quelle
quelle
Antworten:
Sie können verwenden
dirname
:Wenn Sie den vollständigen Pfad angegeben haben, können Sie normal teilen, um den letzten Teil des Pfads zu erhalten. Zum Beispiel mit
basename
:Alle zusammen:
>>> import os >>> path=os.path.dirname("C:/folder1/folder2/filename.xml") >>> path 'C:/folder1/folder2' >>> os.path.basename(path) 'folder2'
quelle
os.path.basename
Sie möchten dirname verwenden . Wenn Sie nur dieses eine Verzeichnis möchten, können Sie os.path.basename verwenden .
Alles in allem sieht es so aus:
os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))
Das sollte dir "other_sub_dir" bringen.
Das Folgende ist nicht der ideale Ansatz, aber ich habe ursprünglich vorgeschlagen, os.path.split zu verwenden und einfach das letzte Element abzurufen. das würde so aussehen:
os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]
quelle
str.split
, ist es besser zu verwendenos.path.split
(was die Unterschiede verschiedener Betriebssysteme besser handhabt).Dies ist ziemlich alt, aber wenn Sie Python 3.4 oder höher verwenden, verwenden Sie PathLib .
# using OS import os path=os.path.dirname("C:/folder1/folder2/filename.xml") print(path) print(os.path.basename(path)) # using pathlib import pathlib path = pathlib.PurePath("C:/folder1/folder2/filename.xml") print(path.parent) print(path.parent.name)
quelle
os.path.dirname
ist was Sie suchen -os.path.dirname(r"C:\folder1\folder2\filename.xml")
Stellen Sie sicher, dass Sie
r
der Zeichenfolge ein Präfix voranstellen , damit sie als Rohzeichenfolge betrachtet wird.Demo -
In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml") Out[46]: 'C:\\folder1\\folder2'
Wenn Sie nur möchten
folder2
, können Sieos.path.basename
mit dem obigen Beispiel verwenden -os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Demo -
In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml")) Out[48]: 'folder2'
quelle
Sie können den vollständigen Pfad als Zeichenfolge abrufen und ihn dann mithilfe des Trennzeichens Ihres Betriebssystems in eine Liste aufteilen. Dann erhalten Sie den Programmnamen, den Ordnernamen usw., indem Sie mit negativen Indizes auf die Elemente am Ende der Liste zugreifen.
So was:
import os strPath = os.path.realpath(__file__) print( f"Full Path :{strPath}" ) nmFolders = strPath.split( os.path.sep ) print( "List of Folders:", nmFolders ) print( f"Program Name :{nmFolders[-1]}" ) print( f"Folder Name :{nmFolders[-2]}" ) print( f"Folder Parent:{nmFolders[-3]}" )
Die Ausgabe der oben genannten war folgende:
Full Path :C:\Users\terry\Documents\apps\environments\dev\app_02\app_02.py List of Folders: ['C:', 'Users', 'terry', 'Documents', 'apps', 'environments', 'dev', 'app_02', 'app_02.py'] Program Name :app_02.py Folder Name :app_02 Folder Parent:dev
quelle
Sie können Pathlib verwenden
from pathlib import Path Path(r"C:\folder1\folder2\filename.xml").parts[-2]
Die Ausgabe der oben genannten war folgende:
'folder2'
quelle