¿Desea eliminar el carácter de retorno / nueva línea (\ n) del campo usando Python y Field Calculator?

13

Tengo una tabla de geodatabase con un campo que estoy tratando de eliminar los caracteres de retorno (nueva línea). Encontré esta publicación ( ¿Cómo puedo eliminar (chomp) una nueva línea? en Python? ) de cómo hacerlo, sin embargo, no está funcionando dentro de la calculadora de campo. Aquí están los fragmentos de código que intenté: El carácter de retorno de la nota no está al final de la cadena .

!myField!.rstrip()

O

!myField!.rstrip('\n')

O

!myField!.rstrip('\r\n')

O

!myField!.replace('\n', '')

000539 error dado para esta opción:

  

Descripción El cálculo utilizado por el campo Calcular o Calcular   La herramienta de valor no es válida. Este mensaje de error proporcionado mostrará una lista de   error específico de Python.

     

Solución Este código de error cubre varios errores de Python:

     

Error de ejemplo 1: excepciones.TypeError: no puede concatenar 'str' y   'int' objetos. Lo anterior es un error específico de Python. El cálculo   está intentando agregar o concatenar una cadena y un número.

     

Error de ejemplo 2: campo no válido a la distancia @ La información anterior es un error   utilizando el objeto de geometría. El método de la distancia no es un método válido.   del objeto de geometría.

     

Para problemas específicos de Python, consulte la ayuda externa de Python para obtener más información.   información, o consulte la ayuda Calcular campo o Calcular valor   para obtener más información sobre estas herramientas.

O

import os
def removeReturn(myField):
  s = myField.rstrip(os.linesep)
  return s

¿Alguna idea de cómo eliminar los caracteres de retorno usando la calculadora de campo?

    
pregunta artwork21 20.12.2012 - 16:27

8 respuestas

4

La solución alternativa para esto, ya que mi tabla de clases de entidad se originó en Excel fue usar el siguiente comando excel:

  

= CLEAN

método para eliminar todos los caracteres de línea de retorno o nueva. Luego puede unirse o importar la tabla a su base de datos GIS.

    
respondido por el artwork21 28.12.2012 - 15:46
9

Creo que esto es solo un error / limitación del analizador de Python con la herramienta calculadora de campo / Calcular campo. Si se encuentra una nueva línea dentro del campo de texto, se produce un SyntaxError: EOL while scanning string literal sin importar lo que intente.

Puedo reproducir el problema en 10.1 SP1 importando el siguiente archivo CSV a una geodatabase de archivos, agregando un campo y simplemente intentando copiar el campo Text en el nuevo campo usando la Calculadora de campo con el analizador Python y expresión !Text! .

ID,Text
1,"this is a multiline 
example"

Intente cambiar al analizador VB, o utilice un UpdateCursor y evitando la calculadora de campo por completo.

Este problema también se discute en los foros de ESRI, con las mismas conclusiones:

El único NIM relevante que pude encontrar fue este:

  • NIM085499 : los cálculos de CalculateField con caracteres no ASCII fallan en un motor de Linux con: "ERROR 000539: SyntaxError: EOL mientras se escanea la cadena literal (línea 1) ".
respondido por el blah238 21.12.2012 - 07:24
3

He usado una declaración SQL para seleccionar primero los nuevos caracteres de línea. En la ventana de diálogo Select By Attributes :

"MY_FIELD" LIKE '%
 %'

Tienes que presionar Enter después del primer%.

    
respondido por el Cindy Jayakumar 21.12.2012 - 06:10
3

!FieldName!.replace(chr(10), "").replace(chr(13), "")

La calculadora de campo está un poco confundida cuando se trata de secuencias de escape como \n y \t . Solo usa los códigos de caracteres en bruto.

    
respondido por el Jason Scheirer 21.12.2012 - 07:01
2
myString = "My text\n"

print myString.strip()
    
respondido por el Dan 20.12.2012 - 16:30
2

Creo que esto debería funcionar como código de secuencia de comandos de lógica previa en la calculadora de campo, pero desafortunadamente parece que no. Lo he publicado de todos modos, en caso de que te ofrezca un enfoque alternativo que puedas modificar para comenzar a trabajar.

def fix(teststring):
    parts = teststring.splitlines()
    newtest = ""
    for part in parts:
        newtest+=part
    return newtest
    
respondido por el PolyGeo 21.12.2012 - 00:03
2

Intente envolver su declaración !field! en la expresión con comillas y un inicializador de cadena cruda , por ejemplo. r"!field!" .

Prueba también str(!field!) .

    
respondido por el blah238 21.12.2012 - 06:24
2

Hay dos soluciones posibles que he encontrado que son confiables. Por alguna razón, CartoPac permite a las personas poner un retorno en el campo OBSERVACIONES donde trabajo. Para deshacerme de ellos, la solución que he encontrado que funciona mejor es usar la Calculadora de campo.

Cambia tu analizador a Python. Coloque lo siguiente en el código de secuencia de comandos pre-lógica:

def carriageReturnRemoval(remark):
    remark = remark.splitlines()
    separator = " -- "
    return separator.join(remark)

Coloque lo siguiente en el siguiente cuadro de texto (este está trabajando en un campo llamado OBSERVACIONES):

carriageReturnRemoval( !REMARKS! )

Cuandoseeliminenlosretornosdecarro,agregaráunespacio,-,yunespacioentrecadalínea.Puedemodificar"-" a un carácter o conjunto de caracteres diferente si lo desea. Pero encontré que esto funciona mejor para mí en función de la forma en que mis equipos de construcción ingresan los datos. Es más fácil realizar operaciones de Buscar / Reemplazar si hay patrones de caracteres reconocibles que dividen cada retorno de carro, que usan en el campo para denotar un nuevo atributo (aunque a menudo es un atributo que podrían haber puesto en el campo adecuado). y me salvó el dolor de cabeza en primer lugar).

Si prefiere usar la Consola Python en ArcGIS, puede modificar lo anterior para que funcione. Sin embargo, también lo he intentado con cierto éxito en la consola de Python:

rows = arcpy.UpdateCursor("Assets\Welds")  
for row in rows:  
    hexString = str(row.REMARKS).encode("hex")  
    if "0a" in hexString:  
        hexString = hexString.replace("0a","")  
        row.REMARKS = hexString.decode("hex")  
        rows.updateRow(row)  

Reemplace "Assets \ Welds" con el nombre de fc apropiado y reemplace row.REMARKS por row. (inserte el nombre del campo aquí)

Es posible que necesite o no ejecutar las líneas de importación a continuación antes de intentar el ejemplo de código anterior:

import arcpy  
import string
    
respondido por el Zachary Ordo - GISP 06.08.2014 - 21:02