¿Buscar / reemplazar comillas dobles usando Python Parser of ArcGIS Field Calculator?

16

Estoy tratando de usar la Calculadora de campo (ArcMap 10.0) para eliminar las comillas dobles en un campo de dirección (no las puse allí, créanme). He intentado muchos encantamientos pero aún no puedo despegar con un cálculo. Sí, ambos campos son cadenas y ambos tienen una longitud aceptable.

Este calculo: Muestra de cálculo

Resultados en esto:

fallar

Con este mensaje de error en el cuadro de diálogo Resultados:

mensaje de error

Y repito, no los puse allí.

válvula de Londres
fuente
1
Así que los está copiando con las citas en su prueba, ¿ya intentó quitar las citas con algo como!testing![1:len(!testing!)-1]
Roy
El fragmento que proporcionó muere con el mismo mensaje.
valveLondon

Respuestas:

16

He encontrado que en 10.0 Field Calculator es bastante raro.

Pero he logrado que funcione. La idea principal es encerrar el nombre del campo con comillas simples.

Ejemplo. supongamos que tenemos campos text1y text2. En lugar de calcular el campo text2con la expresión !text1!, lo que probablemente se producirá un error, prueba este: '!text1'. Como puede ver, estoy usando comillas simples aquí.

Entonces, de vuelta a su tarea. Será más claro usar el código de secuencia de comandos pre-lógica:

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

La expresión será:

calc('!text1!')

Espero que funcione para ti.

No he experimentado más, pero creo que ese comportamiento extraño ocurre porque el cálculo de campo se traduce en la llamada a la herramienta ArcToolbox CalculateField_managementy la expresión se proporciona como un parámetro (probablemente también entre comillas simples o dobles).

ACTUALIZAR:

Mi solución anterior fallará en caso de que haya comillas simples en los valores de campo text1.

Ahora he logrado que funcione tanto en caso de que haya caracteres 'y "(comillas simples y dobles) dentro de cualquier valor en el atributo text1.

Aquí está la expresión, que devolverá la cadena original, que admite ambos tipos de comillas:

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

Para su tarea, puede extenderse a (sin código de secuencia de comandos pre-lógica):

'''!text1!'''[1:-1].replace('"', '')
Alex Markov
fuente
Bueno, tienes muchas esperanzas, pero eso no funciona para mí. Ni el bloque de código ni la línea recta'!testing!'
válvula de Londres el
Hm, funcionó en mi 10.0sp4. Puede ser porque en algún lugar de su campo hay una comilla simple ... ¿Ha considerado usar UpdateCursor en el script de Python?
Alex Markov
2
¿Sabes que? tienes razón, funciona. No había tomado mi jugo de despertador a las 3:00. Tú ganas.
valveLondon
He logrado resolver el problema con una sola cita. Comprueba mi actualización de la respuesta.
Alex Markov
El Código de script pre-lógico funcionó bien cuando se usa dentro de un script - muchas gracias
meryloo
10

Si está utilizando la versión 10.1 y está seguro de que desea deshacerse de todas las instancias de comillas dobles que puede usar:

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

Si alguien sabe por qué esto funciona en 10.1 y no en 10.0, me interesaría.

Aquí están los resultados de mi carrera.

ingrese la descripción de la imagen aquí

TurboGus
fuente
¿Cuál es el truco de magia aquí, su guión no funcionó?
artwork21
Esto no funciona Parece que debería, pero no lo hace.
KiloGeo
¿Ambos campos tienen texto correcto?
TurboGus
@Gus, sí, el campo es texto.
artwork21
2
No estoy usando 10.1. Estoy usando 10.0 - esa versión arcaica que es muuuy 2011
valveLondon
8

Aquí hay una forma de hacerlo sin guión.

  1. Comience a editar sesión en su capa.
  2. Abra la tabla y resalte la columna de campo.
  3. Seleccione la flecha desplegable Opciones de tabla y seleccione Buscar y reemplazar.
  4. Seleccione la pestaña Reemplazar e ingrese Buscar: "seleccione Reemplazar todo (deberá hacer clic dos veces en el botón Reemplazar todo).
artwork21
fuente
Si bien aprecio la posibilidad, no solo quiero reemplazar las comillas dobles, sino que prefiero trabajar a través de scripts.
valveLondon
3

Un enfoque híbrido funcionó en mi sistema:

'!testing!'.replace("\"","")
Aaron
fuente
2

No he probado esto dentro de Arc, pero pude eliminar las comillas dobles de una cadena en un IDE de Python de esta manera (rápida):

aStr ='"test"'

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

print a2

prueba de impresiones a2, sin comillas.

Timothy Michael
fuente
Me doy cuenta de que esto no ayuda con la parte 'Buscar' de su pregunta ...
Timothy Michael
0

hola intenta usar comillas simples como esta! test! .replace ('"', '')

dango
fuente
Hola, esto no funciona
valveLondon
0

Lo encontré bastante fácil con la antigua función VBScript: Replace ([testing],"""","")

Alex
fuente