Mein Büro wird eine große Veränderung in seinem GIS-Bereich erleben. Dieser Abschnitt ist seit den 1980er Jahren in Betrieb und verfügt über eine riesige Sammlung von GIS-Daten (z. B. Shapefiles, Rasterdateien, Daten usw.), hat jedoch noch nie eine Bestandsaufnahme durchlaufen. Jetzt wird es passieren.
Gibt es eine automatisierte Möglichkeit, alle Informationen zu den GIS-Daten (z. B. Shapefile, Lichtbogeninformationen, Layer-Datei, * .mxd, gdb, Rasterdatei usw.) von einem PC in eine Excel-Datei zu extrahieren? Die Informationen können das Erstellungsdatum, das Datum der letzten Bearbeitung, den Ordner- oder Containernamen usw. enthalten.
arcpy
file-geodatabase
excel
metadata
blu_sr
quelle
quelle
arcpy.da.walk
.Antworten:
Dies funktioniert für mich mit der
arcpy.da.Walk
Funktion in ArcGIS 10.1 SP1:Das
csv
Modul wird auch verwendet, um das Schreiben der Ausgabedatei zu vereinfachen. Excel kann CSV-Dateien öffnen, sodass Sie sie als Tabellenkalkulation anzeigen können.In der
arcpy.Describe
Funktion finden Sie zusätzliche Eigenschaften, die Sie in die Ausgabe aufnehmen können.Wenn Sie gezielt Informationen aus den eigentlichen Metadaten herausfiltern möchten, lesen Sie das Skript in dieser Antwort: Erstellen einer Tabelle mit allen Dateinamen (und möglicherweise Metadaten) in einer File-Geodatabase
quelle
Wenn Sie Python verwenden, müssen Sie die richtigen Module verwenden, um das zu tun, was Sie wollen. Um beispielsweise alle Dateien in einem Verzeichnis mit der Erweiterung shp zu finden, gibt es viel einfachere Lösungen, die ohne Unterbrechung präsentiert wurden, was schrecklich ist ... (wie die von Nathan W vorgestellte Lösung, aber es gibt viele, viele andere, nur im Internet suchen)
Einige Beispiele mit relevanten Modulen:
1) mit dem glob modul:
nur Shapefiles:
Shapefiles und Geodatabases:
wenn Sie auch in den Unterverzeichnissen suchen wollen:
2) mit os.listdir und Listenverständnis (in zwei Zeilen) -> Ergebnisliste
3) mit fnmatch modul:
und viele andere Lösungen, rekursiv usw.
quelle
Danke artwork21 und Nathan W für deine Antwort. Und ja, Nathens Code machte die Magie.
Nur Dateiname und Speicherort. Der PC, mit dem ich arbeiten werde, hat viele Coverage-Dateien (die Arc-Info-Datei). Funktioniert das auch auf ihnen?
quelle
arcpy.da.walk
Deckungen aufgelistet werden, aber ich würde es nicht raten, da es nicht in den Datentyp- oder Typfiltern aufgeführt ist.if
Anweisung.txt.close()
wenn Sie es verwenden,with
da es dies für Sie erledigt, wenn der Block beendet wird.Wenn Sie mit ArcGIS Desktop 10.0 (oder einem seiner Service Packs) arbeiten, sollten Sie am besten ein Python-Skript schreiben, das mithilfe von os.walk ein definiertes GIS-Verzeichnis durchsucht und nach gängigen GIS-Dateierweiterungen wie .shp, sucht. gdb, .mdb, etc ... und schreibt das Ergebnis in eine durch Kommas getrennte Textdatei. Sie können dann die Textdatei in Excel bringen, siehe Codebeispiel unten:
Wenn Sie ArcGIS 10.1 (oder höher) für Desktop verwenden, gibt es hier eine andere Antwort, die arcpy.da.Walk verwendet, das bei 10.0 oder früher nicht verfügbar war.
quelle
csv
Moduls zum Abstrahieren des Schreibens der Datei und die Verwendungarcpy.da.walk
von 10.1 SP1 umfassen, damit ArcGIS die Auflistung der GIS-Datentypen handhabt.Wenn Sie die Programmierung vermeiden möchten, ist dies möglicherweise die einfachste und schnellste Methode.
Für Excel gibt es ein Add-On namens ASAP Utilities . Es gibt eine kostenlose 90-Tage-Testversion , danach jedoch 49 USD für geschäftliche Zwecke. Es ist kostenlos für Studenten oder den persönlichen Gebrauch. Das Add-On fügt viele nützliche Funktionen hinzu. Eine davon ist das Erstellen einer Liste von Dateien in einer Ordnerstruktur. Es bietet auch Dateieigenschaften. Sie können die Ergebnisse nach Dateityp einschränken, wenn Sie dies wünschen.
Hier ist ein Video, wie das geht.
Ich habe dieses Add-On bereits verwendet und die Ergebnisse sind sehr schnell.
Hinweis: Ich bin nicht mit dieser Softwarefirma verbunden.
quelle
Ich konnte die anderen Antworten nicht voll zum Laufen bringen.
Im ersten Beispiel wurde in einem Verzeichnis mit Geodatabases und Shapefiles nur eine Liste der Feature-Classes in der Geodatabase angezeigt. Als ich jedoch den Geodatabases-Teil des Skripts auskommentierte, wurde eine Liste der Shapefiles angezeigt.
Im zweiten Beispiel funktionierte der Geodatabases-Teil überhaupt nicht, daher habe ich den Geodatabases-Teil des ersten Beispiels kopiert. Wieder habe ich eine Liste von nur Geodatabases.
Dann traf es mich: Geodatabases werden vor Shapefiles gelesen und das Skript stoppt beim
break
Teil in den Geodatabases.Als Python-Neuling weiß ich nicht, warum das
break
benötigt wird, aber ohne es scheint das Skript in einer Endlosschleife zu laufen, aber da dasbreak
benötigt wird, kam mir der Gedanke, die Geodatabases nach der anderen Datei in eine eigene Schleife zu stellen Typen aufgelistet sind, würde das Problem lösen:#create blank text file with open("C:\\Temp\\GISlayers.txt", "w") as txt: for root, dirs, files in os.walk("C:\\Temp\\temp"): for f in files: #look for shapefiles, etc. [code...] for f in files: #look for geodatabases [code...]
Als ich das tat, bekam ich meine vollständige Auflistung.
quelle