Mam tabelę geobazy z polem, które próbuję usunąć znaki powrotu (nowa linia). Znalazłem ten post ( Jak mogę usunąć (chomp) nową linię w Pythonie? ), Jak to zrobić, jednak nie działa w kalkulatorze polowym. Oto fragmenty kodu, które próbowałem: Uwaga Zwracany znak nie znajduje się na końcu łańcucha .
!myField!.rstrip()
LUB
!myField!.rstrip('\n')
LUB
!myField!.rstrip('\r\n')
LUB
!myField!.replace('\n', '')
000539 błąd podany dla tej opcji:
Opis Obliczenia zastosowane przez narzędzie Oblicz pole lub Oblicz wartość są nieprawidłowe. Ten komunikat o błędzie wyświetli listę konkretnego błędu w języku Python.
Rozwiązanie Ten kod błędu obejmuje szereg błędów w języku Python:
Przykładowy błąd 1: wyjątki. Błąd: nie można połączyć obiektów „str” i „int”. Powyżej jest błąd specyficzny dla Pythona. Obliczenia próbują dodać lub połączyć łańcuch i liczbę.
Przykładowy błąd 2: Niepoprawny kształt pola @ odległość Powyższy błąd dotyczy użycia obiektu geometrii. Metoda odległości nie jest prawidłową metodą obiektu geometrycznego.
Aby uzyskać szczegółowe informacje na temat określonych problemów w języku Python, zapoznaj się z zewnętrzną pomocą języka Python, aby uzyskać więcej informacji, lub skorzystaj z pomocy Oblicz pole lub Oblicz wartość, aby uzyskać więcej informacji na temat tych narzędzi.
LUB
import os
def removeReturn(myField):
s = myField.rstrip(os.linesep)
return s
Wszelkie pomysły na usunięcie znaków powrotu za pomocą kalkulatora pola?
SyntaxError: EOL while scanning string literal
błąd?Odpowiedzi:
Myślę, że to tylko błąd / ograniczenie parsera Pythona za pomocą narzędzia kalkulatora pola / narzędzia Oblicz pole. Jeśli w polu tekstowym pojawi się nowa linia,
SyntaxError: EOL while scanning string literal
występuje niezależnie od tego, co spróbujesz.Mogę odtworzyć problem w wersji 10.1 SP1, importując następujący plik CSV do geobazy danych pliku, dodając pole i po prostu próbując skopiować
Text
pole do nowego pola za pomocą Kalkulatora pola z analizatorem składni Pythona i wyrażeniem!Text!
.Spróbuj przełączyć się na parser VB lub
UpdateCursor
całkowicie uniknąć kalkulatora pola.Zagadnienie to jest również omawiane na forach ESRI, z tymi samymi wnioskami:
Jedyny odpowiedni NIM, jaki mogłem znaleźć, to:
źródło
Istnieją dwa możliwe rozwiązania, które uważam za niezawodne. Z jakiegoś powodu CartoPac pozwala ludziom na zwrot w polu UWAGI, w której pracuję. Aby się ich pozbyć, rozwiązaniem, które uważam za najlepsze, jest użycie kalkulatora pola.
Zmień Parser na Python. Wstaw kod skryptu przedlogicznego:
W następnym polu tekstowym umieść następujący tekst (ten działa na polu o nazwie UWAGI):
Po usunięciu zwrotów karetki doda spację, - i spację między każdą linią. Jeśli chcesz, możesz zmienić „-” na inny znak lub zestaw znaków. Uważam jednak, że działa to najlepiej dla mnie w zależności od sposobu, w jaki ekipy budowlane wprowadzają dane. Łatwiej jest wykonywać operacje Znajdź / zamień, jeśli istnieją rozpoznawalne wzorce znaków dzielące każdy powrót karetki, których używają w polu do oznaczenia nowego atrybutu (chociaż często jest to atrybut, który mogliby po prostu umieścić w odpowiednim polu i przede wszystkim uratował mnie ból głowy).
Jeśli wolisz używać konsoli Python w ArcGIS, możesz zmodyfikować powyższe, aby działało. Jednak spróbowałem tego również z pewnym powodzeniem w konsoli Python:
Zamień „Assets \ Welds” na odpowiednią nazwę fc i zamień row.REMARKS na row. (Tutaj wstaw nazwę pola)
Przed próbą wykonania powyższego przykładu kodu może być konieczne uruchomienie poniższych linii importu:
źródło
Obejściem tego było odkąd moja tabela klas obiektów powstała w programie Excel polegała na użyciu następującego polecenia programu Excel:
metoda usunięcia wszystkich znaków powrotu lub nowego wiersza. Następnie możesz dołączyć lub zaimportować tabelę do swojej bazy danych GIS.
źródło
Użyłem instrukcji SQL, aby najpierw wybrać nowe znaki wiersza. W
Select By Attributes
oknie dialogowym:Musisz nacisnąć
Enter
po pierwszym%.źródło
MY_FIELD.strip()
do pracy, ale ponieważ miałem tylko 5 rekordów, ręcznie je edytowałem.!MY_FIELD![:-1]
- odcinek łańcucha powinien usunąć znak nowej linii (zakładając, że po nowej linii nic się nie dzieje, co wydaje się być w przypadku OP) .!FieldName!.replace(chr(10), "").replace(chr(13), "")
Kalkulator pola jest nieco zagmatwany, jeśli chodzi o sekwencje specjalne, takie jak
\n
i\t
. Wystarczy użyć nieprzetworzonych kodów znaków.źródło
SyntaxError: EOL while scanning string literal
z tym zgadzam. Parser VB działa dobrze.źródło
Myślę, że powinno to działać jako kod skryptu przedlogicznego w kalkulatorze polowym - ale niestety nie wydaje się. Mimo to opublikowałem go na wypadek, gdybyś dostał alternatywne podejście do pracy.
źródło
Spróbuj owinąć
!field!
deklarację w wyrażeniu cudzysłowami i inicjatorem nieprzetworzonego ciągu , npr"!field!"
.Spróbuj
str(!field!)
również.źródło
MYFIELD.replace(r"\n",""), but it doesn't see that I've escaped the newline character, it just fails with a
błąd EOL`.