Ich habe einige Shapefiles, in denen einige der Attribute die nicht englischen Zeichen ÅÄÖ enthalten. Da einige Abfragen mit diesen Zeichen nicht funktionieren (insbesondere ChangeDetector ), habe ich versucht, sie im Voraus mit einem einfachen Skript zu ändern und die neuen Zeichenfolgen einem anderen Feld hinzuzufügen.
Das Ändern von Zeichen funktioniert jedoch einwandfrei, aktualisiert das Feld jedoch nicht mit arcpy.UpdateCursor.
Was ist ein geeigneter Weg, um dies zu lösen?
Ich habe auch versucht, dies über den Feldrechner zu tun, während ich "Code" mit demselben Fehler in den Codeblock gepostet habe.
Fehlermeldung:
Laufzeitfehler Traceback (letzter Aufruf zuletzt): Datei "", Zeile 1, in Datei "c: /gis/python/teststring.py", Zeile 28, in val = code (str (prow.Typkod)) UnicodeEncodeError: Der Codec 'ascii' kann das Zeichen u '\ xc4' in Position 3 nicht codieren: Ordnungszahl nicht im Bereich (128)
Code:
# -*- coding: cp1252 -*-
def code(infield):
data = ''
for i in infield:
## print i
if i == 'Ä':
data = data + 'AE'
elif i == 'ä':
data = data + 'ae'
elif i == 'Å':
data = data + 'AA'
elif i == 'å':
data = data + 'aa'
elif i == 'Ö':
data = data + 'OE'
elif i == 'ö':
data = data + 'oe'
else:
data = data + i
return data
shp = r'O:\XXX\250000\DB\ArcView\shape.shp'
prows = arcpy.UpdateCursor(shp)
for prow in prows:
val = code(unicode(str(prow.Typkod), "utf-8"))
prow.Typkod_U = val
print val
prows.updateRow(prow)
Die Werte von Typkod sind vom Typ: [D, D, S, DDRÄ, TRÄ] usw.
Ich verwende ArcMap Basic (10.1) unter Windows 7.
Neue Fehlermeldung:
Laufzeitfehler Traceback (letzter Aufruf zuletzt): Datei "", Zeile 1, in Datei "c: /gis/python/teststring.py", Zeile 29, in val = code (Unicode (str (Zeile). Typkod), "utf-8")) UnicodeEncodeError: Der Codec 'ascii' kann das Zeichen u '\ xc4' in Position 3 nicht codieren: Ordnungszahl nicht im Bereich (128)
>>> val
'DDRÄ'
>>> type(val)
Typ 'str'
Es scheint, als ob die Ausgabe der Funktion irgendwie falsch ist. Wenn es um ÅÄÖ geht, kehrt es zurück data = u'DDR\xc4'
und nicht (wie es meine Absicht war) data = 'DDRAE'
. Irgendwelche Vorschläge, was dies verursachen könnte?
Es stellte sich heraus, dass es nicht so einfach war, über ÅÄÖ zu iterieren. Es wird als Unicode-Zeichenfolge bezeichnet und beim Einchecken der if-Anweisungen, die anstelle des Literals ÅÄÖ verwendet werden müssen. Nachdem ich das herausgefunden hatte, war der Rest ein Kinderspiel :)
Resultierender Code:
quelle
Überprüfen Sie, ob Folgendes funktioniert:
quelle
val
, aber nicht beim Schreiben in die aktuelle Zeile (die folgende Zeile). [Aktualisieren der Frage mit dieser Änderung.]