¿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í.


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('"', '')

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í


¿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).

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("\"","")

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.


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 ('"', '')


Hola, esto no funciona
valveLondon

0

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.