Znajdź / zamień podwójne cudzysłowy za pomocą Pythona Parsera z ArcGIS Field Calculator?


16

Próbuję użyć kalkulatora pola (ArcMap 10.0) do usunięcia podwójnych cudzysłowów w polu adresu (nie umieszczaj ich tam, uwierz mi). Próbowałem wielu zaklęć, ale wciąż nie jestem w stanie zejść z obliczeń. tak, oba pola są ciągami i oba mają dopuszczalną długość.

To obliczenie: Przykładowe obliczenia

Wyniki w tym:

zawieść

Z tym komunikatem o błędzie w oknie dialogowym Wyniki:

Komunikat o błędzie

I powtarzam, nie umieściłem ich tam.


1
Więc kopiujesz je z cytatami w teście, czy próbowałeś już usunąć cytaty z czymś takim!testing![1:len(!testing!)-1]
Roy

Podany fragment umiera z tą samą wiadomością.
valveLondon

Odpowiedzi:


16

Przekonałem się, że w 10.0 Field Calculator jest dość dziwny.

Ale udało mi się to uruchomić. Główną ideą jest dołączenie nazwy pola do pojedynczych cudzysłowów.

Przykład. załóżmy, że mamy pola text1i text2. Zamiast Obliczanie pola text2z wyrazem !text1!, który prawdopodobnie zakończy się niepowodzeniem, spróbuj tego: '!text1'. Jak widzisz, używam tutaj pojedynczych cytatów.

Wróćmy do swojego zadania. Bardziej zrozumiałe będzie użycie kodu skryptu przedlogicznego:

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

Wyrażenie będzie:

calc('!text1!')

Mam nadzieję, że ci się uda.

Nie eksperymentowałem dalej, ale myślę, że takie dziwne zachowanie ma miejsce, ponieważ obliczenia pola są tłumaczone na wywołanie narzędzia ArcToolbox, CalculateField_managementa wyrażenie jest podawane jako parametr (prawdopodobnie dodatkowo w postaci pojedynczych lub podwójnych cudzysłowów).

AKTUALIZACJA:

Moje poprzednie rozwiązanie zawiedzie w przypadku, gdy w wartościach pola występują pojedyncze cudzysłowy text1.

Teraz udało mi się sprawić, by działał zarówno w przypadku znaków, jak 'i "(pojedynczych i podwójnych cudzysłowów) w dowolnej wartości atrybutu text1.

Oto wyrażenie, które zwróci oryginalny ciąg znaków, obsługujący oba typy cudzysłowów:

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

W przypadku zadania można go rozszerzyć na (bez kodu skryptu przedlogicznego):

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

Masz moje nadzieje, ale to nie działa dla mnie. Ani '!testing!'
szyfr szyfrowy,

Hm, działało na moim 10.0sp4. Być może dlatego, że gdzieś w twoim polu jest tak naprawdę pojedynczy cytat ... Czy zastanawiałeś się nad użyciem UpdateCursor w skrypcie python?
Alex Markov,

2
Wiesz co? masz rację, to działa. Nie miałem mojego soku do wstawania o 3:00. Wygrałeś.
valveLondon

Udało mi się rozwiązać problem jednym cytatem. Sprawdź moją aktualizację odpowiedzi.
Alex Markov,

Kod skryptu
przedlogicznego

10

Jeśli używasz wersji 10.1 i jesteś pewien, że chcesz pozbyć się każdego wystąpienia podwójnego cudzysłowu, którego możesz użyć:

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

Jeśli ktoś wie, dlaczego to działa w wersji 10.1, a nie 10.0, byłbym zainteresowany.

Oto wpis wyników z mojego biegu.

wprowadź opis zdjęcia tutaj


Jaka jest magiczna sztuczka, twój skrypt nie działał?
artwork21

To nie działa Wygląda na to, że powinno, ale tak nie jest.
KiloGeo,

Oba pola są poprawne?
TurboGus,

@Gus, Tak, pole to tekst.
artwork21

2
Nie używam 10.1. Używam 10.0 - ta archaiczna wersja, która jest sooooo 2011.
valveLondon

8

Oto sposób, aby to zrobić.

  1. Rozpocznij edycję sesji na swojej warstwie.
  2. Otwórz tabelę i podświetl kolumnę pola.
  3. Wybierz strzałkę rozwijaną Opcje tabeli i wybierz Znajdź i zamień.
  4. Wybierz zakładkę Zamień i wpisz Znajdź:, "wybierz Zamień wszystko (będziesz musiał dwukrotnie kliknąć przycisk Zamień wszystko).

doceniam tę możliwość, ale nie tylko chcę zastąpić podwójne cudzysłowy i wolę pracować za pomocą skryptów.
valveLondon

3

W moim systemie działało podejście hybrydowe:

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

2

Nie próbowałem tego w Arc, ale byłem w stanie usunąć podwójne cudzysłowy z łańcucha w IDE Pythona w ten (szybki) sposób:

aStr ='"test"'

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

print a2

a2 drukuje test, bez cudzysłowów.


Zdaję sobie sprawę, że to nie pomaga w części „Znajdź” twojego pytania ...
Timothy Michael

0

cześć, spróbuj użyć pojedynczych cytatów takich jak ten! test! .replace ('”,„ ”)


Cześć, to nie działa.
valveLondon

0

Znalazłem całkiem proste ze starą funkcją VBScript: Replace ([testing],"""","")

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.