2013-05-09 6 views
13

Ich versuche, einige Geoverarbeitung durchzuführen. Meine Aufgabe besteht darin, alle Shapefiles in einem Verzeichnis zu finden und dann den vollständigen Pfadnamen für dieses Shapefile innerhalb des Verzeichnisses zu finden. Ich kann den Namen der Shapefile bekommen, aber ich weiß nicht, wie man den vollständigen Pfadnamen für diese Shapefile bekommt.Benötigen Sie den Pfad für bestimmte Dateien mit os.walk()

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

Antwort

38

os.walk gibt Sie den Pfad zu dem Verzeichnis, als der erste Wert in der Schleife, os.path.join() nur verwenden 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)) 

I path zu dirpath in der Schleife mit nicht in Konflikt umbenannt die Variable path, die Sie bereits an os.walk() übergeben haben.

Beachten Sie, dass Sie nicht testen müssen, ob das Ergebnis .endswith() == True; if macht das schon für Sie, der == True Teil ist völlig redundant.

Sie können .extend() und einen Generator Ausdruck verwenden Sie den obigen Code ein wenig kompakter zu machen:

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 eine Liste Verständnis:

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

Dank für Ihre Hilfe danken! Ich denke, das war einfacher als ich dachte. – Schack

-1

scheint 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)) 
+3

Nein, wird es nicht. 'abspath' basiert auf dem Dateinamen des * aktuellen Arbeitsverzeichnisses *, was ein völlig anderer Pfad sein kann. –

+0

@Martijn: ja du hast recht. – gsmaker

-1

Warum nicht import glob?

import glob 

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

und ich bekomme alle jpeg 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'] 
+2

'glob()' unterstützt nur eine feste Tiefe von Unterverzeichnissen, 'os.walk()' unterstützt beliebige Tiefen. Siehe [Wie kann ich Unterordner mit dem Modul glob.glob in Python durchsuchen?] (Http://stackoverflow.com/questions/14798220/14798263#14798263) –

Verwandte Themen