Encontre / Substitua aspas duplas usando o Python Parser da ArcGIS Field Calculator?


16

Estou tentando usar a calculadora de campo (ArcMap 10.0) para remover aspas duplas em um campo de endereço (não as coloquei lá, acredite). Eu tentei muitos encantamentos, mas ainda sou incapaz de decolar com um cálculo. sim, ambos os campos são string e ambos são de comprimento aceitável.

Este cálculo: Cálculo da amostra

Resultados nisto:

falhou

Com esta mensagem de erro na caixa de diálogo Resultados:

mensagem de erro

E repito, não os coloquei lá.


1
Então você está copiando-as com as aspas em seu teste, você já tentou extrair as aspas com algo como!testing![1:len(!testing!)-1]
Roy

O trecho que você forneceu morre com a mesma mensagem.
valveLondon

Respostas:


16

Descobri que na 10.0 Field Calculator é bastante estranho.

Mas eu consegui fazê-lo funcionar. A idéia principal é colocar o nome do campo entre aspas simples.

Exemplo. vamos supor que temos campos text1e text2. Ao invés de campo Calculando text2com a expressão !text1!, o que provavelmente irá falhar, tente este: '!text1'. Como você vê, estou usando aspas simples aqui.

Então, de volta à sua tarefa. Será mais claro usar o Código de script pré-lógico:

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

A expressão será:

calc('!text1!')

Espero que funcione para você.

Não experimentei mais, mas acho que esse comportamento estranho acontece porque o cálculo do campo é traduzido na chamada para a ferramenta ArcToolbox CalculateField_managemente a expressão é fornecida como um parâmetro para ele (provavelmente adicionalmente entre aspas simples ou duplas).

ATUALIZAR:

Minha solução anterior falhará caso haja aspas simples nos valores do campo text1.

Agora eu consegui fazê-lo funcionar tanto no caso em que existem caracteres 'como "(aspas simples e duplas) dentro de qualquer valor no atributo text1.

Aqui está a expressão, que retornará a string original, suportando os dois tipos de aspas:

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

Para sua tarefa, ela pode ser estendida para (sem o Código de script pré-lógico):

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

Bem, você tem minhas esperanças, mas isso não funciona para mim. Nem o bloco de código nem o acima em linha reta'!testing!'
valveLondon

Hum, funcionou no meu 10.0sp4. Pode ser que em algum lugar do seu campo haja realmente aspas simples ... Você já pensou em usar o UpdateCursor no script python?
Alex Markov

2
Você sabe o que? você está certo, isso funciona. Eu não tinha tomado meu suco de 3:00 da manhã. Você ganha.
valveLondon

Consegui resolver o problema com uma única citação. Verifique minha atualização para a resposta.
Alex Markov

O Pré-Logic código de script funcionou bem quando usado dentro de um script - muito obrigado
meryloo

10

Se você estiver usando a versão 10.1 e tiver certeza de que deseja se livrar de todas as instâncias de aspas duplas, poderá usar:

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

Se alguém souber por que isso funciona na versão 10.1 e não na 10.0, eu estaria interessado.

Aqui estão os resultados da minha execução.

insira a descrição da imagem aqui


Qual é o truque de mágica aqui, seu script não funcionou?
artwork21

Isso não funciona. Parece que deveria, mas não.
KiloGeo

Ambos os campos estão com o texto correto?
TurboGus

@ Gus, o campo Sim é texto.
artwork21

2
Eu não estou usando 10.1. Eu estou usando 10.0 - essa versão arcaica que é
muuuuito

8

Aqui está uma maneira não-script de fazer isso.

  1. Inicie a sessão de edição na sua camada.
  2. Abra a tabela e destaque a coluna do campo.
  3. Selecione a seta suspensa Opções da tabela e selecione Localizar e substituir.
  4. Selecione a guia Substituir e digite Localizar o que ":, selecione Substituir tudo (você precisará clicar no botão Substituir tudo duas vezes).

Embora aprecie a possibilidade, não estou apenas querendo substituir as aspas duplas e prefiro trabalhar por meio de scripts.
valveLondon

3

Uma abordagem híbrida funcionou no meu sistema:

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

2

Eu não tentei isso dentro do Arc, mas consegui remover aspas duplas de uma string em um IDE Python desta maneira (rápida):

aStr ='"test"'

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

print a2

a2 imprime teste, sem aspas.


Sei que isso não ajuda com a parte 'Find' da sua pergunta ...
Timothy Michael


0

Achei muito fácil com a antiga função VBScript: Replace ([testing],"""","")

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.