1 votos

Dividir una cadena entre 2 caracteres

Tengo la siguiente cadena en Arcmap:

"Nodo 1_1234,23,Nodo 2_567,88,Nodo 3_45,25"

Quiero devolver los números entre el "_" y el "," en tres columnas

por ejemplo, "1234,23" en la columna A "567,88" en la columna B "45,25" en la columna C

Por favor, ayúdeme con una expresión que pueda usar en la calculadora de campo.

3voto

GeneQ Puntos 2885

Aquí tienes el código y los pasos que deberás seguir en Field Calculator:

def get_node(node_text,node_number):
   parts = node_text.split(',')
   node_val = float(parts[node_number][parts[node_number].find('_')+1:])
   return node_val
  1. Asegúrese de que Python está seleccionado como opción de parser
  2. Haga clic en la casilla Mostrar bloque de código
  3. Pegue el código anterior en el código script pre-lógico:
  4. En el área que se encuentra debajo del bloque de código, introduzca la siguiente fórmula (sustituyendo !InputColumn! por el nombre de la columna de la tabla que contiene los datos)

    • get_node(!InputColumn!,0)

    Cambiando el segundo parámetro puede extraer los otros nodos de su entrada.

Editar: Me acabo de dar cuenta de que si no estás familiarizado con Python esto puede ser bastante obtuso así que aquí está un desglose de lo que está sucediendo en el código.

  • La función toma dos entradas, una cadena con el formato de su pregunta y un número que indica qué nodo quiere extraer
  • La primera línea de la función divide la cadena de entrada en una lista de subcadenas divididas por comas
  • La siguiente línea analiza el valor numérico de la subcadena de nodos que has especificado. Para ello, busca en la cadena de nodos la posición del carácter de subrayado y convierte el resto de caracteres de la subcadena en un valor flotante
  • La última línea devuelve el valor numérico del nodo

3voto

HeretoLearn Puntos 118

La calculadora de campos sólo puede actualizar un campo a la vez, por lo que podría realizar pequeñas variaciones de un cálculo para cada campo. O, si está dispuesto a probar un poco de Python, podría utilizar arcpy.da.UpdateCursor para hacerlo todo a la vez. Incluso podría soltar esto en la ventana de Python (modificando para su propia ruta de la tabla y los nombres de los campos, por supuesto).

import arcpy
import re

# Update these 3 variables for your data
table = 'your_table'
in_field = 'your_starting_field'
update_fields = ['field1', 'field2', 'field3']

with arcpy.da.UpdateCursor(table, [in_field] + update_fields) as cursor:
    for row in cursor:
        # this part will find numbers after a leading _
        nums = re.findall('(?<=_)[0-9.]+', row[0])
        cursor.updateRow([row[0]] + nums)

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