it-swarm.com.de

Benötigen Sie den Pfad für bestimmte Dateien mit os.walk ()

Ich versuche, eine Geoverarbeitung durchzuführen. Meine Aufgabe ist es, alle Shapefiles in einem Verzeichnis zu finden und dann den vollständigen Pfadnamen für dieses Shapefile im Verzeichnis zu finden. Ich kann den Namen des Shapefile erhalten, weiß aber nicht, wie ich den vollständigen Pfadnamen für dieses Shapefile erhalten kann.

shpfiles = []
for path, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp") == True:
            shpfiles.append[x]
17
Schack

os.walk gibt den Pfad zum Verzeichnis als ersten Wert in der Schleife an. Verwenden Sie einfach os.path.join(), um den vollständigen Dateinamen zu erstellen:

shpfiles = []
for dirpath, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp"):
            shpfiles.append(os.path.join(dirpath, x))

Ich habe path in der Schleife in dirpath umbenannt, um keinen Konflikt mit der Variablen path zu verursachen, die Sie bereits an os.walk() übergeben haben.

Beachten Sie, dass Sie nicht prüfen müssen, ob das Ergebnis von .endswith() == True; if erledigt das bereits für Sie, der == True-Teil ist vollständig redundant.

Sie können .extend() und einen Generatorausdruck verwenden, um den obigen Code etwas kompakter zu gestalten:

shpfiles = []
for dirpath, subdirs, files in os.walk(path):
    shpfiles.extend(os.path.join(dirpath, x) for x in files if x.endswith(".shp"))

oder sogar als ein Listenverständnis:

shpfiles = [os.path.join(d, x)
            for d, dirs, files in os.walk(path)
            for x in files if x.endswith(".shp")]
49
Martijn Pieters

Es scheint, dass os.path.abspath(finename) funktioniert. Bitte versuche.

shpfiles = []
for path, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp") == True:
            shpfiles.append(os.path.join(path, x))
0
gsmaker

Warum nicht import glob?

import glob 

print(glob.glob('F:\OTHERS\PHOTOS\Panama\\mai13*\\*.jpg') )

und ich bekomme alles, was ich will, mit absolutem Pfad

>>> 
['F:\\OTHERS\\PHOTOS\\Panama\\mai13\\03052013271.jpg', 
'F:\\OTHERS\\PHOTOS\\Panama\\mai13\\05052013272.jpg', 
'F:\\OTHERS\\PHOTOS\\Panama\\mai13\\05052013273.jpg']
0
octoback