2015-10-27 10 views
11

In Python welchen Befehl soll ich verwenden, um den Namen des Ordners zu erhalten, der die Datei enthält, mit der ich arbeite?Abrufen des Ordnernamens der Datei in Python

"C:\folder1\folder2\filename.xml"

Hier "folder2" ist, was ich bekommen möchten.

Das einzige, was ich habe kommen mit ist 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, es zu tun?

+0

möglich Duplikat: [Python - Auszug Ordnerpfad aus Dateipfad] (http://stackoverflow.com/q/17057544/4279) – jfs

Antwort

21

können Sie dirname verwenden:

os.path.dirname(path) 

Return den Verzeichnisnamen der Pfad Pfad. Dies ist das erste Element des Paares, das durch Übergabe des Pfades an die Funktion split() zurückgegeben wird.

Und den vollständigen Pfad gegeben, dann können Sie normal teilen, um den letzten Teil des Pfades zu erhalten. Zum Beispiel durch die Verwendung basename:

os.path.basename(path) 

Return den Basisnamen des Pfadweges. Dies ist das zweite Element von das Paar zurückgegeben durch Übergabe Pfad an die Funktion split(). Beachten Sie, dass das Ergebnis dieser Funktion unterscheidet sich von dem Unix-Basisname Programm; Wenn der Basisname für '/ foo/bar /' 'bar' zurückgibt, gibt die Funktion basename() eine leere Zeichenfolge ('') zurück.


Alle zusammen:

>>> import os 
>>> path=os.path.dirname("C:/folder1/folder2/filename.xml") 
>>> path 
'C:/folder1/folder2' 
>>> os.path.basename(path) 
'folder2' 
+2

, alternativ den letzten Teil zu bekommen, Sie könnte 'os.path.basename' – mgilson

+0

@mgilson guten Punkt verwenden! Aktualisierte meine Antwort um dies zu reflektieren, vielen Dank – fedorqui

4

os.path.dirname ist das, was Sie suchen -

os.path.dirname(r"C:\folder1\folder2\filename.xml") 

Stellen Sie sicher, r auf die Zeichenfolge vorangestellt, so dass seine als Ausgangs String betrachtet .

Demo -

In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml") 
Out[46]: 'C:\\folder1\\folder2' 

Wenn Sie nur folder2 möchten, können Sie os.path.basename mit dem oben, 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' 
5

Sie sind hinein sehen g zu verwenden dirname.Wenn Sie nur wollen, dass ein Verzeichnis, können Sie os.path.basename,

Wenn alle zusammen sieht es wie folgt aus:

os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt')) 

Das sollte man bekommt „other_sub_dir“

Das folgende ist nicht die ideale Ansatz, aber ich ursprünglich vorgeschlagen, mit os.path.split, und einfach das letzte Element zu bekommen. was würde wie folgt aussehen:

os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1] 
+4

anstatt mit 'str.split' zu trennen, ist es besser,' os.path.split' zu verwenden (welches die Unterschiede der verschiedenen Betriebssysteme besser behandelt). – mgilson

+0

Ja. Sie haben Recht! Habe ich vergessen. Danke @mgilson – idjaw