Suchen / Ersetzen von Anführungszeichen mit Python Parser von ArcGIS Field Calculator?


16

Ich versuche, mit dem Feldrechner (ArcMap 10.0) doppelte Anführungszeichen in einem Adressfeld zu entfernen (ich habe sie dort nicht eingegeben, glauben Sie mir). Ich habe viele Beschwörungsformeln ausprobiert, bin aber immer noch nicht in der Lage, mit einer Berechnung anzufangen. Ja, beide Felder sind Zeichenfolgen und beide haben eine akzeptable Länge.

Diese Berechnung: Beispielrechnung

Ergebnisse in diesem:

Scheitern

Mit dieser Fehlermeldung im Ergebnisdialog:

Fehlermeldung

Und ich wiederhole, ich habe sie nicht hineingelegt.


1
Sie kopieren sie also mit den Anführungszeichen in Ihrem Test. Haben Sie bereits versucht, die Anführungszeichen mit so etwas wie!testing![1:len(!testing!)-1]
Roy,

Das von Ihnen bereitgestellte Snippet stirbt mit der gleichen Nachricht.
valveLondon

Antworten:


16

Ich habe festgestellt, dass in 10.0 Field Calculator ziemlich seltsam ist.

Aber ich habe es geschafft, es zum Laufen zu bringen. Die Hauptidee ist, den Feldnamen in einfache Anführungszeichen zu setzen.

Beispiel. Nehmen wir an, wir haben Felder text1und text2. Anstatt Berechnung Feld text2mit Ausdruck !text1!, die wahrscheinlich fehl, versuchen Sie diesen: '!text1'. Wie Sie sehen, verwende ich hier einfache Anführungszeichen.

Also zurück zu deiner Aufgabe. Es wird klarer, Pre-Logic Script Code zu verwenden:

def calc(value):
    return value.replace('"', '')

Ausdruck wird sein:

calc('!text1!')

Ich hoffe es wird für dich funktionieren.

Ich habe nicht weiter experimentiert, aber ich denke, dass ein solches seltsames Verhalten auftritt, weil die Feldberechnung in den Aufruf des ArcToolbox-Tools übersetzt CalculateField_managementund ein Ausdruck als Parameter dafür bereitgestellt wird (wahrscheinlich zusätzlich in einfachen oder doppelten Anführungszeichen).

AKTUALISIEREN:

Meine vorherige Lösung schlägt fehl, wenn die Werte von field einfache Anführungszeichen enthalten text1.

Jetzt habe ich es geschafft, es funktionieren zu lassen, sowohl für den Fall, dass Zeichen 'und "(einfache und doppelte Anführungszeichen) in einem beliebigen Wert im Attribut sind text1.

Hier ist ein Ausdruck, der die ursprüngliche Zeichenfolge zurückgibt und beide Arten von Anführungszeichen unterstützt:

'''!text1!'''[1:-1]

Für Ihre Aufgabe kann es erweitert werden (ohne Pre-Logic Script Code):

'''!text1!'''[1:-1].replace('"', '')

Du hast meine Hoffnungen geweckt, aber das funktioniert bei mir nicht. Weder der Codeblock noch die gerade nach oben'!testing!'
valveLondon

Hm, es hat auf meinem 10.0sp4 geklappt. Vielleicht liegt es daran, dass irgendwo in Ihrem Bereich ein einfaches Anführungszeichen steht ... Haben Sie in Betracht gezogen, UpdateCursor in Python-Skripten zu verwenden?
Alex Markov

2
Weißt du was? du hast recht, es funktioniert. Ich hatte meinen 3:00 Wecksaft nicht gehabt. Du gewinnst.
valveLondon

Ich habe es geschafft, das Problem mit einem einzigen Zitat zu lösen. Überprüfe mein Update auf die Antwort.
Alex Markov

Der Pre-Logic-
Skriptcode

10

Wenn Sie Version 10.1 verwenden und sicher sind, dass Sie alle doppelten Anführungszeichen entfernen möchten, die Sie verwenden können:

!testing!.replace("\"","")

Wenn jemand weiß, warum dies in 10.1 und nicht in 10.0 funktioniert, wäre ich interessiert.

Hier ist der Ergebniseintrag von meinem Lauf.

Bildbeschreibung hier eingeben


Was ist der Zaubertrick hier, Ihr Skript hat nicht funktioniert?
Artwork21

Das geht nicht. Es sieht aus wie es sollte, aber es tut es nicht.
KiloGeo

Sind beide Felder korrekt?
TurboGus

@ Gus, Ja Feld ist Text.
artwork21

2
Ich benutze 10.1 nicht. Ich benutze 10.0 - diese archaische Version, die sooooo 2011 ist.
valveLondon

8

Hier ist ein nicht-Skript-Weg, um es zu tun.

  1. Starten Sie die Editiersitzung auf Ihrer Ebene.
  2. Tabelle öffnen und Feldspalte markieren.
  3. Wählen Sie den Dropdown-Pfeil Tabellenoptionen und anschließend Suchen & Ersetzen.
  4. Wählen Sie die Registerkarte Ersetzen und geben Sie Folgendes ein: Suchen nach:, "wählen Sie Alle ersetzen (Sie müssen zweimal auf die Schaltfläche Alle ersetzen klicken).

Ich schätze zwar die Möglichkeit, möchte aber nicht nur die doppelten Anführungszeichen ersetzen, sondern lieber über Skripte arbeiten.
valveLondon

3

Ein hybrider Ansatz funktionierte auf meinem System:

'!testing!'.replace("\"","")

2

Ich habe dies in Arc noch nicht ausprobiert, aber ich konnte doppelte Anführungszeichen aus einem String in einer Python-IDE auf folgende (schnelle) Weise entfernen:

aStr ='"test"'

a1 = aStr.lstrip('"')
a2 = a1.rstrip('"')

print a2

a2 druckt Test ohne Anführungszeichen.


Mir ist klar, dass dies bei der Suche in Ihrer Frage nicht hilft ...
Timothy Michael,

0

Hallo, versuche es mit einfachen Anführungszeichen wie diesem! test! .replace ('"', '')


Hallo, das geht nicht.
valveLondon

0

Ich fand es ziemlich einfach mit der alten VBScript-Funktion: Replace ([testing],"""","")

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.