it-swarm.com.de

Wie kann ich den Ordnerpfad aus dem Dateipfad in Python extrahieren?

Ich möchte nur den Ordnerpfad vom vollständigen Pfad zu einer Datei abrufen.

Zum Beispiel T:\Data\DBDesign\DBDesign_93_v141b.mdb Und ich möchte nur T:\Data\DBDesign Erhalten (ohne \DBDesign_93_v141b.mdb).

Ich habe so etwas ausprobiert:

existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = str(existGDBPath.split('\\')[0:-1])
print wkspFldr 

aber es gab mir ein Ergebnis wie folgt:

['T:', 'Data', 'DBDesign']

das ist nicht das Ergebnis, das ich benötige (als T:\Data\DBDesign).

Irgendwelche Ideen, wie ich den Pfad zu meiner Datei erhalten kann?

89
Genspec

Mit der Verwendung der Funktion split waren Sie fast fertig. Sie mussten nur die Zeichenfolgen wie folgt verbinden.

>>> import os
>>> '\\'.join(existGDBPath.split('\\')[0:-1])
'T:\\Data\\DBDesign'

Obwohl ich die Verwendung der Funktion os.path.dirname Empfehlen würde, müssen Sie nur die Zeichenfolge übergeben, und es wird die Arbeit für Sie erledigen. Da Sie anscheinend unter Windows arbeiten, sollten Sie auch die Funktion abspath verwenden. Ein Beispiel:

>>> import os
>>> os.path.dirname(os.path.abspath(existGDBPath))
'T:\\Data\\DBDesign'

Wenn Sie nach dem Teilen sowohl den Dateinamen als auch den Verzeichnispfad möchten, können Sie die Funktion os.path.split Verwenden, die ein Tupel wie folgt zurückgibt.

>>> import os
>>> os.path.split(os.path.abspath(existGDBPath))
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')
108
Sukrit Kalra

Verwenden Sie das os.path Modul:

>>> import os
>>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
>>> wkspFldr = os.path.dirname(existGDBPath)
>>> print wkspFldr 
'T:\Data\DBDesign'

Sie können davon ausgehen, dass eine Art von Dateinamenmanipulation bereits in os.path Implementiert ist. Andernfalls müssen Sie dieses Modul wahrscheinlich noch als Baustein verwenden.

[~ # ~] Update [~ # ~]

Man sollte erwägen, pathlib für die Neuentwicklung zu verwenden. Es befindet sich in der stdlib für Python3.4, aber verfügbar auf PyPI für frühere Versionen. Diese Bibliothek bietet eine objektorientiertere Methode zum Bearbeiten von Pfaden <opinion> Und ist mit </opinion> Viel einfacher zu lesen und zu programmieren.

>>> import pathlib
>>> existGDBPath = pathlib.Path(r'T:\Data\DBDesign\DBDesign_93_v141b.mdb')
>>> wkspFldr = existGDBPath.parent
>>> print wkspFldr
Path('T:\Data\DBDesign')
74
SethMMorton

Das eingebaute Submodul os.path hat eine Funktion für genau diese Aufgabe.

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
34
Dan Allan

Hier ist der Code:

import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign
3
Victor Lellis

Jeder, der dies in der ESRI GIS-Tabellenfeldrechner-Oberfläche versucht, kann dies mit dem Python-Parser tun:

PathToContainingFolder =

"\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])

damit

\ Users\me\Desktop\Neuer Ordner\file.txt

wird

\ Users\me\Desktop\Neuer Ordner

0
Zipper1365

Hier ist mein kleines Hilfsprogramm zum Aufteilen von Pfaden in Dateien und Pfadtoken:

import os    
# usage: file, path = splitPath(s)
def splitPath(s):
    f = os.path.basename(s)
    p = s[:-(len(f))-1]
    return f, p
0