2016-03-23 12 views
2

ArcGIS 10.0Python in ArcGIS. Benötigen Sie Zugriff auf Elemente von Strings

bekomme ich arcpy.UpdateCursor für den Zugriff auf mein Feld verwendet:

import arcpy 
import sys 

layer = sys.argv[1]#my table 
field = sys.argv[2]#target field in table 

cursor = arcpy.UpdateCursor(layer) 

for row in cursor: 
    attrString = row.getValue("field") 
    subString = attrString[3] 
    row.setValue(field,subString) 
    cursor.updateRow(row) 

Mein Problem ist, dass ich das Element der Zeichenfolge zugreifen möchten, die Variable "hat Zeile ", aber ist es nicht unterstützt Indizes und nicht iterierbar. Können Sie bitte andere Methoden empfehlen?

+0

Können Sie klarstellen, was Sie mit "Zugriff auf das Element der Zeichenfolge" meinen? Versuchen Sie, Daten nach Zeilen aus einem anderen Feld zu erhalten? – Erica

+0

Ich meine, wenn ich Zugriff auf den Index der "Zeile" Variable, Zeile [1] will, habe ich Fehler - "Zeile" Objekt unterstützt keine Indizierung " – ppostnov

+0

Sie wollen also wissen, in welcher Zeile Sie sind? Oder Sie möchten den Wert eines anderen Feldes kennen (z. B. "1") und wenn es gleich "E" ist, dann aktualisieren Sie "Feld"? – Erica

Antwort

0

Die ArcGIS-Hilfeseiten über UpdateCursors und Accessing data using cursors sind nützliche Hintergrundinformationen.

Die Funktion UpdateCursor erstellt ein "Cursor" -Objekt, das aus "Zeilen" -Objekten besteht. Jede dieser Zeilen stellt ein einzelnes Feature der Feature-Class oder der Layer dar.

Um auf Daten (ob Lesen oder Aktualisieren) von einem row Objekt zuzugreifen, müssen Sie den Feldnamen anstelle eines numerischen Index angeben. Also, wenn Sie überprüfen, ob Attribut letter-E gleich:

if row.getValue("letter") == "E": 
    # do stuff 

Sobald Sie diesen Attributwert in einer anderen Variablen gespeichert bekommen haben, können Sie Elemente des resultierenden Strings zugreifen und tun Manipulation jeder Python-String Sie wollen :

attrString = row.getValue("street") 
subString = attrString[11] 
newString = attrString.replace("B", "t") 
attrString[11] = "t" 
+0

Ich verstehe nicht, was "Brief" ist. Ich habe layer.shp, layer.shp hat attributive Tabelle, attributive Tabelle hat Feld - "Streets", also möchte ich Zugriff auf Elemente von jedem String-Feld "Streets" bekommen. Die erste Zeichenfolge des Feldes "Streets" enthält "1-st Main sBreet" (zum Beispiel), und ich möchte Zugriff auf [11] Element dieser Zeichenfolge bekommen, und ersetze es zu "t", dass ich "1-st Main" bekomme Straße " – ppostnov

+0

Es ist nur ein Beispiel für einen Attributnamen. – Erica

+0

ok :) Wie verstehe ich in meinem Fall Attributnamen ist es "Feld"? – ppostnov

0

Problem beheben. Ich ersetze "Feld" zu Feld und funktioniert jetzt gut.

import arcpy 
import sys 

layer = sys.argv[1]#my table 
field = sys.argv[2]#target field in table 

cursor = arcpy.UpdateCursor(layer) 

for row in cursor: 
    attrString = row.getValue(field) 
    subString = attrString[3] 
    row.setValue(field,subString) 
    cursor.updateRow(row) 
0

Arbeit mit der neueren Version von Cursors: arcpy.da.UpdateCursor und Sie erhalten die Zeile [field] Indizierung haben, für die ich glaube, dass Sie ursprünglich gesucht haben.

Sie müssen ArcGIS> = 10.1 für den Zugriff auf da verwenden. Cursor. ArcGIS 10.3 Help for arcpy.da

Verwandte Themen