Ich habe eine Geodatabase-Tabelle mit einem Feld, in dem ich Rückgabezeichen entfernen möchte (neue Zeile). Ich habe in diesem Beitrag ( Wie kann ich einen Zeilenumbruch in Python entfernen (chomp)? ) Erfahren, wie das geht, aber es funktioniert nicht im Feldrechner . Hier sind die Codefragmente, die ich ausprobiert habe: Beachten Sie, dass das Rückgabezeichen nicht am Ende der Zeichenfolge steht .
!myField!.rstrip()
ODER
!myField!.rstrip('\n')
ODER
!myField!.rstrip('\r\n')
ODER
!myField!.replace('\n', '')
000539 Fehler für diese Option angegeben:
Beschreibung Die vom Werkzeug "Feld berechnen" oder "Wert berechnen" verwendete Berechnung ist ungültig. Diese Fehlermeldung listet den spezifischen Python-Fehler auf.
Lösung Dieser Fehlercode deckt eine Reihe von Python-Fehlern ab:
Beispielfehler 1: Ausnahmen.TypeError: Objekte 'str' und 'int' können nicht verkettet werden. Das Obige ist ein Python-spezifischer Fehler. Die Berechnung versucht, eine Zeichenfolge und eine Zahl hinzuzufügen oder zu verketten.
Beispielfehler 2: Ungültige Feldform bei Abstand Das obige Beispiel ist ein Fehler beim Verwenden des Geometrieobjekts. Die Distanzmethode ist keine gültige Methode des Geometrieobjekts.
Weitere Informationen zu bestimmten Python-Problemen finden Sie in der externen Python-Hilfe. Weitere Informationen zu diesen Tools finden Sie in der Hilfe zum Berechnen von Feldern oder Werten.
ODER
import os
def removeReturn(myField):
s = myField.rstrip(os.linesep)
return s
Irgendwelche Ideen, wie man zurückgegebene Zeichen mit dem Feldrechner entfernt?
SyntaxError: EOL while scanning string literal
Fehlermeldung?Antworten:
Ich denke, dies ist nur ein Fehler / eine Einschränkung des Python-Parsers mit dem Feldrechner / Feld berechnen-Werkzeug. Wenn im Textfeld ein Zeilenumbruch
SyntaxError: EOL while scanning string literal
auftritt , geschieht dies unabhängig davon, was Sie versuchen.Ich kann das Problem mit 10.1 SP1 reproduzieren, indem ich die folgende CSV-Datei in eine File-Geodatabase importiere, ein Feld hinzufüge und einfach versuche
Text
, das Feld mit dem Feldrechner mit dem Python-Parser und und dem Ausdruck in das neue Feld zu kopieren!Text!
.Versuchen Sie, zum VB-Parser zu wechseln, oder verwenden Sie einen
UpdateCursor
und vermeiden Sie den Feldrechner vollständig.Dieses Problem wird auch in den ESRI-Foren mit den gleichen Schlussfolgerungen erörtert:
Das einzige relevante NIM, das ich finden konnte, war folgendes:
quelle
Es gibt zwei mögliche Lösungen, die sich als zuverlässig erwiesen haben. Aus irgendeinem Grund erlaubt CartoPac den Leuten, einen Return in das Feld REMARKS zu setzen, in dem ich arbeite. Um diese zu beseitigen, benutze ich den Feldrechner als die Lösung, die ich für am besten befunden habe.
Ändern Sie Ihren Parser in Python. Fügen Sie Folgendes in den Pre-Logic Script Code ein:
Geben Sie Folgendes in das nächste Textfeld ein (dieses Feld bearbeitet ein Feld mit dem Namen BEMERKUNGEN):
Wenn Ihr Wagenrücklauf entfernt wird, werden ein Leerzeichen, - und ein Leerzeichen zwischen den Zeilen eingefügt. Sie können "-" in ein anderes Zeichen oder einen anderen Zeichensatz ändern, wenn Sie möchten. Aber ich habe festgestellt, dass dies am besten für mich funktioniert, basierend auf der Art und Weise, wie meine Konstruktionsteams Daten eingeben. Es ist einfacher, Suchen / Ersetzen-Operationen durchzuführen, wenn erkennbare Zeichenmuster vorhanden sind, die jeden Wagenrücklauf aufbrechen und die sie im Feld verwenden, um ein neues Attribut zu kennzeichnen und hat mir die Kopfschmerzen erspart).
Wenn Sie die Python-Konsole in ArcGIS verwenden möchten, können Sie die obigen Einstellungen ändern, damit sie funktionieren. Ich habe dies jedoch auch mit einigem Erfolg in der Python-Konsole versucht:
Ersetzen Sie "Assets \ Welds" durch den entsprechenden fc-Namen und ersetzen Sie row.REMARKS durch row. (Geben Sie hier den Feldnamen ein.)
Möglicherweise müssen Sie die folgenden Importzeilen ausführen, bevor Sie das obige Codebeispiel ausführen können:
quelle
Da meine Feature-Class-Tabelle in Excel erstellt wurde, bestand die Problemumgehung darin, den folgenden Excel-Befehl zu verwenden:
Methode zum Entfernen aller Rückgabe- oder Zeilenumbrüche. Anschließend können Sie die Tabelle verbinden oder in Ihre GIS-Datenbank importieren.
quelle
Ich habe eine SQL-Anweisung verwendet, um zuerst die neuen Zeilenzeichen auszuwählen. Im
Select By Attributes
Dialogfenster:Sie müssen
Enter
nach dem ersten% drücken .quelle
MY_FIELD.strip()
zur Arbeit kommen konnte, aber weil ich nur 5 Datensätze hatte, habe ich sie manuell bearbeitet.!MY_FIELD![:-1]
den Feldrechner verwenden, um die Werte mit dem Python-Ausdruck neu zu berechnen. Das Zeichenfolgen-Slice sollte das Zeilenumbruch-Zeichen entfernen (vorausgesetzt, nach dem Zeilenumbruch kommt nichts, was für das OP der Fall zu sein scheint). .!FieldName!.replace(chr(10), "").replace(chr(13), "")
Feldrechner ist etwas verwirrt, wenn es um Escape-Sequenzen wie
\n
und geht\t
. Verwenden Sie einfach die rohen Zeichencodes.quelle
SyntaxError: EOL while scanning string literal
mit diesem. VB-Parser funktioniert gut.quelle
Ich denke, dass dies als vorlogischer Skriptcode im Feldrechner funktionieren sollte - aber leider scheint es nicht so zu sein. Ich habe es trotzdem gepostet, falls es Ihnen einen alternativen Ansatz bietet, den Sie optimieren können, um mit der Arbeit zu beginnen.
quelle
Versuchen Sie, Ihre
!field!
Deklaration in den Ausdruck mit Anführungszeichen und einem unformatierten Zeichenfolgeninitialisierer zu setzen , zr"!field!"
.Versuchen Sie es
str(!field!)
auch.quelle
MYFIELD.replace(r"\n",""), but it doesn't see that I've escaped the newline character, it just fails with a
EOL` Fehler.