Hinzufügen eines Dateinamens zum Attributfeld mithilfe von Feld berechnen?


9

Weiß jemand, wie man den Shapefile-Namen einem Feld in der Attributtabelle der Datei hinzufügt?

Ich habe eine Beschreibung gefunden:

'Sie müssen in CalculateField eine Inline-Variable wie% Name% in Ausdruck verwenden, damit die Zeichenfolge unabhängig vom Namen der Datei basierend auf dem Namen der Datenbankdatei eingefügt wird!'

Ich habe versucht, das CalculateField-Tool mit% Name% auszuführen, aber ich habe die folgende Meldung erhalten:

Executing: CalculateField "2011-11-6 15_41_point" DBFName %Name% PYTHON #
Start Time: Thu Dec 08 23:34:23 2011
WARNING 000405: No records within table
Succeeded at Thu Dec 08 23:34:24 2011 (Elapsed Time: 1.00 seconds)

Wo ist mein Fehler?

Antworten:


11

Dieser Python-Code fügt allen Feature-Klassen (mit Ausnahme derjenigen in Datasets) das Feld FILENAME hinzu und füllt es mit dem Namen der Feature-Class.

# Import standard library modules
import arcpy, os, sys
from arcpy import env

# Allow for file overwrite
arcpy.env.overwriteOutput = True

# Set the workspace directory 
env.workspace = r"P:\geodatabase.gdb\filename" 

# Get the list of the featureclasses to process
fc_tables = arcpy.ListFeatureClasses()

# Loop through each file and perform the processing
for fc in fc_tables:
    print str("processing " + fc)

    # Define field name and expression
    field = "FILENAME"
    expression = str(fc) #populates field   

    # Create a new field with a new name
    arcpy.AddField_management(fc,field,"TEXT")

    # Calculate field here
    arcpy.CalculateField_management(fc, field, '"'+expression+'"', "PYTHON")

funktioniert in Version 10.2. funktioniert aber nicht in Version 10.2.2.
Nate Bradshaw

Nichts passiert, wenn ich den Code in die Python-Konsole von Arc Map (10.6)
David

6

Auf der arcscripts-Website befindet sich ein Skript, das Sie dabei unterstützen soll

http://arcscripts.esri.com/details.asp?dbid=14534

Zusammenfassung Ein einfaches Skript zum Erstellen eines Felds mit dem Namen "FILENAME" und zum Anhängen des Dateinamens des Shapefiles an jeden Eintrag in der Attributtabelle. Verwenden Sie mit so vielen Shapefiles in einem bestimmten Verzeichnis. Nützlich beim Auswählen von Shapefile-Einträgen und beim Kombinieren in einer separaten Datei, um eine Breadcrumb-Spur des ursprünglichen Shapefile-Namens beizubehalten.

Führen Sie die Datei in einem Verzeichnis aus, das alle Shapfiles enthält, die geändert werden müssen

Ich hoffe, dass Sie danach suchen


Zur Information: Funktioniert nicht für Arcgis 10.X (die Python-Codesyntax hat sich nach Arcgis 9.x geändert).
Gisnside


1

Wenn all das aufgrund von Versionsinkompatibilität oder mangelndem Wissen (wie bei mir) bei Ihnen nicht funktioniert, versuchen Sie diese Problemumgehung:

  • Verwenden Sie das Konvertierungswerkzeug In CAD exportieren und exportieren Sie alle Ihre Feature-Classes aus Ihrer Geodatabase in eine DWG-Datei
  • Der Name der Feature-Class wird verwendet, um das Layer-Feld für die CAD-Datei zu füllen
  • Verwenden Sie das Konvertierungstool CAD zu Geodatabase, um Ihre Features wieder in eine GDB zu exportieren
  • Sie haben jetzt die Layernamenfelder in Ihrer Tabelle für jedes einzelne Feature
  • Verwenden Sie das Werkzeug "Zusammenführen", um Ihre Feature-Classes aus der GDB in einem einzigen Shapefile zu kombinieren, das das Layer-Attributfeld mit dem ursprünglichen Feature-Class-Namen enthält, damit Sie die Elemente identifizieren können

0

Ich habe diesen Link zu einem ArcGIS-Tool des US-amerikanischen Fisch- und Wildtierservices gefunden, das genau das tut, wonach Sie suchen. Es hat wie ein Zauber funktioniert!


Dies ist das gleiche Tool, das in einer früheren Antwort beschrieben wurde
PolyGeo

Das Tool vom US Fish and Wildlife Service funktioniert nur, wenn der Feldname "NAME" lautet. Es kann flexibel gemacht werden, indem das
Feldfeld-
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.