Mehr

Ordnernamen als Attribut zu allen Shapefiles in diesem Ordner hinzufügen

Ordnernamen als Attribut zu allen Shapefiles in diesem Ordner hinzufügen


Ich habe viele Ordner mit Shapefiles in jedem von ihnen. Ich möchte Python verwenden, um jeden Ordner zu durchsuchen und allen Shapefiles, die den Ordnernamen enthalten, ein neues Feld hinzuzufügen.

Irgendwelche Ideen?


Diese Herausforderung würde ich mit Walk angehen. Durchlaufen Sie dann die Feature-Classes und fügen Sie die Verzeichnisnamen mit einem UpdateCursor hinzu.

import arcpy, os # Das Eingabe-(Basis-)Verzeichnis workspace = r"C:	mp" # Erzeuge eine leere Liste, die mit walk unterhalb gefüllt wird fcs = [] # Durchsuche alle Verzeichnisse und Verzeichnisse und liste alle Feature-Classes walk = arcpy.da.Walk(workspace, datatype="FeatureClass") für dirpath, dirnames, filenames in walk: for filename in filenames: fcs.append(os.path.join(dirpath, filename)) # Schleife durch die fcs-Liste , Feld hinzufügen und den Verzeichnisnamen für fc in fcs hinzufügen: arcpy.AddField_management(fc, field_name = "folder", field_type = "TEXT", field_length = 250) dirname = os.path.dirname(fc) with arcpy.da. UpdateCursor(fc, "folder") als Cursor: für Zeile im Cursor: row[0] = dirname cursor.updateRow(row)

als nur eine Ideenskizze: Zuerst können Sie den Ordnernamen mit etwas wie:

os.path.relpath(.","…")

oder auch den Pfad des Verzeichnisses abrufen und mit 'split' analysieren

Oder versuchen Sie es mit os.walk

Suchen Sie dann Shapefiles mit einem übereinstimmenden String (wieder nach Bedarf parsen) mit arcpy.ListFeatureClasses()

du kannst iterieren

Übergeben Sie diese Zeichenfolge dann an AddField_management:

arcpy.AddField_management (FC, Feldname, Feldtyp)

dann füllen Sie es mit CalculateField

arcpy.CalculateField_management (fc, Feldname, Daten)


Anmerkung 1: Ab Version 5.1.0 sind die meisten Operationen für die Liste der Dateien verfügbar, die von der Dateien hinzufügen Funktion neu implementiert. Aggregierte Variablen enthalten jetzt Koordinatenvariablen und Attributmetadaten. Die aggregierte Dimension kann mit Integer-, Vektor- oder Koordinatenindexierung indiziert werden. Weitere Funktionen sind in Entwicklung.

Anmerkung 2: Version 5.1.1 enthält einige wichtige Fehlerbehebungen für die neue Implementierung. Dazu gehören Fehlerbehebungen für ein Problem mit Nicht-Unity-Schritten entlang der aggregierten Dimension, für ein Problem mit Dateien, die während der Lebensdauer des Skripts nicht ordnungsgemäß geöffnet bleiben, und auch für ein Problem, bei dem die zurückgegebene Variable in bestimmten Fällen möglicherweise ein falsches internes Tag hat um eine skalare Variable anzuzeigen, was zu einem seltsamen Verhalten führt. Benutzern der Version 5.1.0 wird empfohlen, dem Inhalt von Variablen, die mit gelesen werden, nicht zu vertrauen Dateien hinzufügen und so schnell wie möglich auf 5.1.1 zu aktualisieren.

Hinweis zur Abwärtskompatibilität von GRIB2: In Version 5.2.0 wurden die GRIB2-Codetabellen umfassend überarbeitet, um sie an den aktuell dokumentierten Stand der Parametertabellen primär gemäß NCEP-Definition anzupassen. Dies kann einige Probleme mit der Abwärtskompatibilität verursachen. Weitere Informationen und eine Problemumgehung finden Sie im Abschnitt "GRIB2-Abwärtsinkompatibilitätswarnung" im NCL-Referenzhandbuch.

Das Dateien hinzufügen -Funktion bietet dem Benutzer die Möglichkeit, auf Daten zuzugreifen, die sich über mehrere Dateien erstrecken. Die Funktion gibt eine einzelne Variable vom Typ Liste zurück, die eine Liste von Verweisen auf die Dateien enthält, auf die das Argument file_path zeigt. Dateien, auf die durch die Dateipfadzeichenfolge verwiesen wird, müssen in einem unterstützten Dateiformat vorliegen und eine unterstützte Dateierweiterung am Ende jedes Dateinamens haben. Die Erweiterung ist erforderlich, obwohl sie nicht Teil des eigentlichen Dateinamens sein muss. Die derzeit unterstützten Formate, gültigen Statuswerte und akzeptierten Erweiterungen sind: NetCDF ("r", "w", "c") ".nc", ".cdf", ".netcdf"

GRIB-Versionen 1 und 2 ("r") ".gr", ".gr1", ".grb", ".grib", ".grb1", ".grib1", ".gr2", "grb2", " .grib2"

(GRIB2-Unterstützung ab Version 4.3.0 verfügbar.)

(Eingeschränkte HDF5-Unterstützung in Version 6.0.0 oder höher verfügbar.)

Shapefile ("r") ".shp" (Shapefile), ".mif" (MapInfo), ".gmt" (Generic Mapping Tools), ".rt1" (TIGER)

(Unterstützung für Shapefiles und andere raumbezogene Vektordatenformate ist in Version 5.1.1 oder höher verfügbar. Dies ist möglicherweise nicht auf allen Systemen verfügbar.)

Datei hinzufügen behandelt diese Erweiterungen ohne Beachtung der Groß-/Kleinschreibung: ".grib", ".GRIB" und ".Grib" weisen alle auf eine GRIB-Datei hin.

Wenn die Status "c" gesetzt ist, wird die Datei erstellt, wenn sie nicht existiert. Falls er vorhanden ist, wird eine Fehlermeldung ausgegeben und der fehlende Standardwert für Dateien zurückgegeben. Wenn "w" gesetzt ist und alle Dateien vorhanden sind und über Berechtigungen zum Lesen und Schreiben verfügen, werden die Dateien zum Lesen und Schreiben geöffnet. Wenn eine dieser Bedingungen fehlschlägt, wird eine Fehlermeldung gemeldet und der Standardwert für fehlende Datei zurückgegeben. Wenn "r" festgelegt ist, müssen die Dateien ebenfalls vorhanden sein und der Benutzer muss über Leseberechtigungen für diese Dateien verfügen. Andernfalls wird eine Fehlermeldung ausgegeben und der fehlende Standardwert zurückgegeben. Siehe die wird vermisst Funktion zum Erkennen des zurückgegebenen fehlenden Werts in einem Programm.

    Wohingegen Datei hinzufügen gibt einen Verweis auf eine einzelne Datei in einer Variablen vom Typ . zurück Datei, Dateien hinzufügen gibt eine Variable vom Typ . zurück aufführen die Verweise enthält, jeweils vom Typ Datei, in mehrere Dateien. Diese Kombination aus aufführen und Datei Typen bildet eine spezialisierte aufführen Typ. Es bietet eine Möglichkeit, den aggregierten Inhalt von Variablen zu erhalten, die die vollständige Liste von Dateien umfassen.

Unter welchen Bedingungen sollten die Optionen "cat" (Standard) und "join" verwendet werden? Wenn die Dimension ganz links einer Variablen eine "Datensatz"-Dimension (z. B. "Zeit") mit aufeinanderfolgenden Koordinaten in jeder Datei ist, dann ist die Option "Katze" am besten. Wenn jedoch keine Datensatzdimension vorhanden ist (z. B. [lev,lat,lon], bei der die vorhandenen Dimensionen in allen Dateien die gleiche Größe und Koordinatenwerte haben), ist die Option "Join" geeignet.

Derzeit wird weder im "Join"- noch im "cat"-Modus überprüft, ob die Dateien richtig sortiert sind. NCL geht davon aus, dass das als Dateipfad -Argument enthält die Dateinamen in der richtigen Reihenfolge. Im "cat"-Modus sind NCL-Fehler wahrscheinlich das Ergebnis von Dateien außerhalb der Reihenfolge, da die Koordinatenwerte der Bemaßung ganz links eine nicht monotone Folge bilden. Im "Join"-Modus gibt NCL keine Fehler aus, aber die Ergebnisse sind nicht korrekt.

Wenn Sie einen Befehl wie verwenden Systemfunktion ("ls *.nc") um eine Liste der zu aggregierenden Dateien zu erhalten, müssen Sie sicherstellen, dass der Befehl "ls" Ihnen die Dateien in der richtigen Reihenfolge liefert. Ist dies nicht der Fall, besteht eine mögliche Lösung darin, die Dateien umzubenennen, um die richtige Reihenfolge sicherzustellen. Eine andere könnte darin bestehen, eine Textdatei zu erstellen, die die Namen jeder Datei enthält, einen pro Zeile, in der richtigen Reihenfolge. Dann könntest du es gebrauchen asciiread um die Dateinamen in ein String-Array aufzunehmen.

Ob im "Join"- oder "Cat"-Modus, NCL überprüft die Dimensionalität (d. h. die Anzahl und Größe der nicht aggregierten Dimensionen) der Subjektvariablen in jeder Datei, während sie aggregiert wird. Die Dimensionalität der Variablen in der ersten Datei der Aggregation setzt Maßstäbe. Stimmt die Dimensionalität einer gleichnamigen Variable in einer Folgedatei nicht überein, wird eine Warnung ausgegeben und deren Inhalt nicht als Teil des aggregierten Ergebnisses verwendet.

Benutzer, die aggregieren viele NetCDF-Dateien zusammen in einem einzigen Aufruf an die Dateien hinzufügen Funktion sollte sich bewusst sein, dass die Anzahl der Dateien, die gleichzeitig geöffnet werden können, begrenzt ist. Viele ist natürlich ein relativer Begriff. OPeNDAP-aktivierte NCL ist durch die OPeNDAP NetCDF-Clientbibliothek auf 64 geöffnete Dateien beschränkt, wenn auf Dateien entweder lokal oder über das Netzwerk zugegriffen wird. Ansonsten erlauben typische Unix/Linux-Systeme normalerweise 1024 offene Dateien, obwohl dieser Wert für ältere oder weniger verbreitete Systeme variieren kann und auch beim Erstellen des Betriebssystemkernels optimiert werden kann. Beachten Sie, dass die tatsächliche Anzahl möglicher geöffneter Dateien aufgrund intern verwendeter Dateideskriptoren möglicherweise etwas unter dem Grenzwert liegt. NCL kann jedoch optional Dateien nach jedem Zugriff schließen, wodurch diese Einschränkung praktisch aufgehoben wird. Dies wird durch den Aufruf von erreicht setfileoption Verfahren zum Einstellen der Option UnterdrückenSchließen zu Falsch. Dies ist nur bei NetCDF ein Problem, da bei anderen von NCL unterstützten Dateiformaten generell Dateien nach jedem Zugriff geschlossen werden.


AGOL Map hat alle meine Feldnamen geändert/erstellt. Was ist Percent_1 und woher kommt dieser Name?

ArcDesktop-Expats, die in diesen fremden Ländern Hilfe suchen.

Ich habe ArcPro verwendet, um eine Karte zu erstellen (danke an alle, die mir gestern geholfen haben). Ich habe das Feature-Class-to-Shapefile-Tool verwendet, um die gewünschten Daten zu exportieren. Ich habe den Ausgabeordner gezippt und versucht, ihn in eine AGOL-Karte einzugeben, aber es hat ihm nicht gefallen. Also habe ich den Ordner geöffnet, den gesamten Inhalt ausgewählt und an eine ZIP-Datei gesendet, die ich von AGOL importieren und anzeigen konnte.

JEDOCH sind alle Attribut-/Feldnamen so aufgebauscht. Es schien hauptsächlich die Feldnamen und nicht die Aliase zu verwenden, was meiner Meinung nach in Ordnung ist, aber einige / die meisten von ihnen sind vollständig erfunden und nutzlos. Dinge wie Percent_Hispanic wurde zu Percent_1, Percent_Non_Hispanic_American_Indian zu Percent_2. Was ist passiert?? Gibt es eine bessere Möglichkeit, meine Feature-Class zu importieren? Ich habe "als Weblayer teilen" versucht, aber mein Konto hat keine Veröffentlichungsrechte.

Beim Versuch, meine Daten in diese AGOL-Karte zu übertragen, ist es mir auch gelungen, die Feature-Class auf AGOL als Layer-Paket zu hosten, das unter MyContent angezeigt wird. Ich habe auch eine andere als GeoJSON gehostet, da die Zip-Datei zu groß war, um sie direkt zu meiner AGOL-Karte hinzuzufügen. In meiner AGOL-Karte konnte ich dieses Layer-Paket oder GeoJSON jedoch mein Leben lang nicht finden. Sie haben die richtigen Attributnamen.

Wie kann ich die Feld-/Attributnamen in meiner AGOL-Map bearbeiten?

Warum haben sie sich alle aufgebauscht und wie kann ich die Daten in Zukunft richtig importieren?

Wie kann ich meine AGOL-Karte finden und hinzufügen, die ich unter meinen Inhalten hochgeladen habe? Ich habe nach dem Namen gesucht. Habe es sogar zu meinen Favoriten hinzugefügt und auf Hinzufügen geklickt > Suche aus Ebenen > mein Inhalt > Favoriten, aber es gibt keine Ergebnisse


find hat eine sehr praktische Option -exec:

Sie können dafür auch rsync verwenden.

Wenn Sie leere Verzeichnisse aus dem Quellbaum behalten möchten, überspringen Sie die Option --prune-empty-dirs:

Wenn Sie tun nicht möchten, dass Symlinks, Änderungsdaten, Dateiberechtigungen, Eigentümer usw. erhalten bleiben, ersetzen Sie bitte -a durch eine andere Kombination von -rlptgoD . -)

Sie können find und cpio im Pass-Through-Modus verwenden

Dadurch werden alle .csv-Dateien im aktuellen Verzeichnis und darunter gefunden und nach /target kopiert, wobei die Verzeichnisstruktur beibehalten wird, die in . .

es findet alle Dateien in /path/to/files und darunter und kopiert sie nach /target/path/to/files und darunter.

Der Befehl cp lässt mehrere Quellargumente zu:

VORBEHALT: Ich verwende hier einen rekursiven Glob, dies ist die globstar-Option in Bash 4+ und ksh und wird standardmäßig in zsh unterstützt. Rekursive Kugeln nicht passen versteckte Dateien und Ordner an, und einige Implementierungen folgen Symlinks, während andere dies nicht tun.

Wenn Ihre Shell rekursive Globs nicht unterstützt oder Sie sie nicht verwenden möchten, können Sie Folgendes tun:

  • *.csv */*.csv */*/*.csv */*/*/*.csv -- dies ist natürlich sehr redundant und erfordert die Kenntnis der Tiefe Ihrer Verzeichnisstruktur.
  • $(find . -name '*.csv') -- This Wille Versteckte Dateien und Ordner zuordnen. find unterstützt auch die Angabe, ob Symlinks gefolgt werden oder nicht, was nützlich sein kann.

find -name "*.csv" | xargs cp --parents -t /target

Wenn Sie Dateinamen mit Leerzeichen haben, fügen Sie die Optionen -print0 und -0 hinzu, wie in einem der Kommentare vorgeschlagen:


Schau das Video: Import Shapefile to Postgresql via QGIS and Postgis Shapefile ImportExport Manager