Trova / sostituisci virgolette doppie usando Python Parser di ArcGIS Field Calculator?


16

Sto cercando di usare il Field Calculator (ArcMap 10.0) per eliminare le doppie virgolette in un campo di indirizzi (non le ho inserite lì, credetemi). Ho provato molti incantesimi ma non riesco ancora a decollare con un calcolo. sì, entrambi i campi sono stringa ed entrambi hanno una lunghezza accettabile.

Questo calcolo: Calcolo del campione

Risultati in questo:

fallire

Con questo messaggio di errore nella finestra di dialogo Risultati:

messaggio di errore

E ripeto, non li ho messi lì.


1
Quindi li stai copiando con le virgolette nel tuo test, hai già tentato di eliminare le virgolette con qualcosa del genere!testing![1:len(!testing!)-1]
Roy

Lo snippet che hai fornito muore con lo stesso messaggio.
valvolaLondra,

Risposte:


16

Ho scoperto che in 10.0 Field Calculator è abbastanza strano.

Ma sono riuscito a farlo funzionare. L'idea principale è di racchiudere il nome del campo tra virgolette singole.

Esempio. supponiamo che abbiamo campi text1e text2. Invece di Calcolo campo text2con l'espressione !text1!, che probabilmente fallirà, provate questo: '!text1'. Come vedi sto usando virgolette singole qui.

Quindi, tornando al tuo compito. Sarà più chiaro usare il codice di script pre-logico:

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

L'espressione sarà:

calc('!text1!')

Spero che funzionerà per te.

Non ho sperimentato ulteriormente, ma penso che questo strano comportamento si verifichi perché il calcolo del campo viene tradotto nella chiamata allo strumento ArcToolbox CalculateField_managemente l'espressione viene fornita come parametro (probabilmente racchiusa tra virgolette singole o doppie).

AGGIORNARE:

La mia soluzione precedente fallirà nel caso in cui ci siano virgolette singole nei valori di campo text1.

Ora sono riuscito a farlo funzionare sia nel caso in cui ci siano caratteri 'sia "(virgolette singole e doppie) all'interno di qualsiasi valore nell'attributo text1.

Ecco espressione, che restituirà una stringa originale, supportando entrambi i tipi di virgolette:

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

Per la tua attività può essere esteso a (senza il codice di script pre-logico):

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

Bene, hai avuto le mie speranze, ma non funziona per me. Né il codeblock né il straight up'!testing!'
valveLondon

Hm, ha funzionato sul mio 10.0sp4. Può essere perché da qualche parte nel tuo campo c'è effettivamente una virgoletta singola ... Hai mai considerato di usare UpdateCursor nello script di Python?
Alex Markov,

2
Sai cosa? hai ragione, funziona. Non avevo avuto il mio succo di sveglia alle 3:00. Hai vinto.
valvolaLondra,

Sono riuscito a risolvere il problema con una sola citazione. Controlla il mio aggiornamento alla risposta.
Alex Markov,

Il codice di script pre-logico ha funzionato bene se utilizzato all'interno di uno script - molte grazie
meryloo,

10

Se stai usando la versione 10.1 e sei sicuro di voler sbarazzarti di ogni istanza di virgolette doppie puoi usare:

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

Se qualcuno sa perché funziona in 10.1 e non in 10.0, sarei interessato.

Ecco la voce dei risultati della mia corsa.

inserisci qui la descrizione dell'immagine


Qual è il trucco magico qui, la tua sceneggiatura non ha funzionato?
artwork21

Questo non funziona Sembra che dovrebbe, ma non lo è.
KiloGeo,

Entrambi i campi sono corretti per il testo?
TurboGus,

@Gus, il campo Sì è testo.
artwork21

2
Non sto usando 10.1. Sto usando 10.0 - quella versione arcaica che è così tremenda 2011.
ValLondon

8

Ecco un modo non di script per farlo.

  1. Inizia la sessione di modifica sul tuo livello.
  2. Apri la tabella ed evidenzia la colonna del campo.
  3. Selezionare la freccia a discesa Opzioni tabella e selezionare Trova e sostituisci.
  4. Seleziona la scheda Sostituisci e inserisci Trova cosa ":, seleziona Sostituisci tutto (dovrai fare doppio clic sul pulsante Sostituisci tutto).

mentre apprezzo la possibilità, non voglio solo sostituire le doppie virgolette e preferirei lavorare tramite script.
valvolaLondra,

3

Un approccio ibrido ha funzionato sul mio sistema:

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

2

Non l'ho provato all'interno di Arc, ma sono stato in grado di rimuovere le doppie virgolette da una stringa in un IDE Python in questo modo (rapido):

aStr ='"test"'

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

print a2

a2 stampa test, senza virgolette.


Mi rendo conto che questo non aiuta con la parte "Trova" della tua domanda ...
Timothy Michael,

0

ciao prova a usare virgolette singole come questa! test! .replace ('"', '')


Ciao, questo non funziona.
valvolaLondra,

0

L'ho trovato abbastanza facile con la vecchia funzione VBScript: Replace ([testing],"""","")

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.