6 votos

ArcGIS 10 Python dividir cadena

Estoy tratando de usar Python para dividir un campo de cadena de tres nuevos campos en el separador " - ". El campo se encuentra en el formato "a - b - c". Así que inicialmente tenía esto en la calculadora de campo para newFieldA:

!myField!.partition(" - ")[0]

Esto me dio el valor a en newFieldA. Del mismo modo, he calculado newFieldB y newFieldC. Después de más experiencia con Python usuario tomó una mirada en ella, este fue el resultado final:

' ' if !myField! == 'NULL' else !myField!.split(' - ')[0]

La prueba de NULL se puso en porque algunos de los valores NULL tirar errores. Cada uno de los tres campos fueron calculados utilizando este código, sólo el índice fue cambiado (0, 1 o 2).

Mi problema ahora es que, después de cambiar los errores ortográficos en la myField, he intentado dividir el campo de nuevo, usando el mismo código que trabajó anteriormente. Ahora no se puede ejecutar, dando el error de "mal nombre de campo o desequilibrada entre comillas". Definitivamente estoy usando el campo correcto, y las comillas no son desequilibradas. También, yo, literalmente copiado y pegado desde el código que he usado anteriormente, así que no veo por qué no estaría fallando ahora. Me siento como que me estoy perdiendo de algo muy simple. ¿Alguien tiene alguna idea?

**edit** he puesto lo siguiente en el codeblock

define splitField(value):
' ' if value Is None
else:
  value.split(' - ')[0]

y en la expresión de la ventana

splitField(!myField!)

Estoy recibiendo un error de sintaxis en la línea 1, no he estado usando Python tiempo suficiente para ver lo que podría ser, como que se ve bien para mí. ¿Alguien tiene alguna sugerencia para hacer que el código sea mejor?

editar estoy trabajando con datos de la delincuencia, por lo que en el campo de la SUBACCIÓN tengo "Policial - Robo - Fraude". Entonces creé tres campos de MANDATO, la CATEGORÍA, y el DELITO. El resultado final debe ser "Policía" en el MANDATO, "Robo" en la CATEGORÍA y "Fraude" en el DELITO. He cambiado el codeblock para

def splitField(value):
  ' ' if !SUBACTION! == 'NULL'
      else:
        value.split(' - ')[0]

Ahora está dando un error de sintaxis en la línea 2.

7voto

Jake Puntos 126

Si! micampo! == 'NULL' no sirve para probar un valor null. Que pondrá a prueba un una cadena igual a 'NULL'. Uso:

if !myField! is None:

A accomlish la tarea, definir una función de python en el bloque de código pre-logic y utilizar esa función en la ventana de expresión. El ejemplo de código siguiente tira el primer token de un '-' delimitado por cuerdas.

enter image description here

1voto

Richard Puntos 337

Ver relacionados con roscas en GIS-Lab Foro de discusión

!InputField!.split(u"-")[0]

0voto

oipoistar Puntos 116

prueba esto:

>>> string = "a-b-c"
>>> string
'a-b-c'
>>> string.split('-')
['a', 'b', 'c']

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X