Python 및 Field Calculator를 사용하여 Field에서 return / newline (\ n) 문자를 제거 하시겠습니까?


14

반환 문자 (새 줄)를 제거하려고하는 필드가있는 지오 데이터베이스 테이블이 있습니다. 이 게시물 ( Python에서 줄 바꿈을 제거하는 방법)을 찾았 지만 필드 계산기에서 작동하지 않습니다. 내가 시도한 코드 스 니펫은 다음과 같습니다. 참고 반환 문자는 문자열의 끝에 없습니다 .

!myField!.rstrip()

또는

!myField!.rstrip('\n')

또는

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

또는

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

이 옵션에 대해 000539 오류가 발생했습니다 :

설명 필드 계산 또는 값 계산 도구에서 사용하는 계산이 유효하지 않습니다. 이 오류 메시지는 특정 Python 오류를 나열합니다.

솔루션이 오류 코드는 많은 Python 오류를 다룹니다.

오류 예 1 : 예외. TypeError : 'str'및 'int'개체를 연결할 수 없습니다. 위의 파이썬 특정 오류입니다. 계산에서 문자열과 숫자를 추가하거나 연결하려고합니다.

오류 예 2 : 유효하지 않은 필드 shape @ distance 위의 도형 개체 사용 오류입니다. 거리 방법은 형상 객체의 올바른 방법이 아닙니다.

특정 Python 문제에 대한 자세한 내용은 외부 Python 도움말을 참조하거나 이러한 도구에 대한 자세한 내용은 필드 계산 또는 값 계산 도움말을 참조하십시오.

또는

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

필드 계산기를 사용하여 리턴 문자를 제거하는 방법에 대한 아이디어가 있습니까?


줄 바꿈 문자 ( "\ n")입니까? 대신 캐리지 리턴 ( "\ r") 일 수 있습니까? 또한 모든 행의 모든 ​​값이 알파입니까, 아니면 필드 중 하나의 숫자 값에서 실패합니까? 아마도 str (! myField!). rstrip ( '\ n')
RyanKDalton

발생하는 ArcGIS 오류 (일반적이지 않고 도움이되지 않음)가 아니라 오류 메시지와 줄 번호를 사용하여 전체 파이썬 추적을 게시하십시오.
blah238

주어진 다양한 파이썬 답변이 모두 정확하기 때문에 ArcGIS 자체에서 무언가처럼 보이기 시작합니다.
Cindy Jayakumar

당신은 점점 SyntaxError: EOL while scanning string literal오류?
blah238

계산기가 가져 오기 모듈을 어떻게 처리하는지 잘 모르겠지만 가져 오기를 다시 시도하고 re.sub를 사용하십시오.
Tomek

답변:


9

필자는 이것이 필드 계산기 / 필드 계산 도구를 사용하여 Python 파서의 버그 / 제한이라고 생각합니다. 텍스트 필드에 줄 바꿈이 SyntaxError: EOL while scanning string literal있으면 시도한 결과에 관계없이 나타납니다.

다음 CSV 파일을 파일 지오 데이터베이스로 가져 와서 필드를 추가 Text하고 Python 구문 분석기 및 표현식과 함께 필드 계산기를 사용하여 필드를 새 필드 에 복사하려고하면 10.1 SP1에서 문제를 재현 할 수 있습니다 !Text!.

아이디, 텍스트
1, "여러 줄입니다 
예"

VB 파서로 전환하거나 UpdateCursor및 필드 계산기를 사용 하지 말고 완전히 피하십시오.

이 문제는 ESRI 포럼에서도 같은 결론으로 ​​논의됩니다.

내가 찾을 수있는 유일한 관련 NIM은 다음과 같습니다.

  • NIM085499- 비 ASCII 문자를 사용한 CalculateField 계산이 "ERROR 000539 : SyntaxError : EOL (문자열 리터럴 (1 행) 스캔 중)"과 함께 Linux 엔진에서 실패합니다.

4

신뢰할 수있는 것으로 밝혀진 두 가지 가능한 솔루션이 있습니다. 어떤 이유로 CartoPac은 사람들이 내가 일하는 비고 필드에 반품을 넣도록 허용합니다. 그것들을 제거하기 위해 내가 가장 잘 작동하는 것으로 밝혀진 솔루션은 필드 계산기를 사용하는 것입니다.

파서를 Python으로 변경하십시오. 사전 논리 스크립트 코드에 다음을 입력하십시오.

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

다음 텍스트 상자에 다음을 입력하십시오 (이 필드는 REMARKS 필드에서 작업 중임).

carriageReturnRemoval( !REMARKS! )

여기에 이미지 설명을 입력하십시오

캐리지 리턴이 제거되면 공백과 각 줄 사이에 공백이 추가됩니다. 원하는 경우 "-"를 다른 문자 또는 문자 세트로 수정할 수 있습니다. 하지만 건설 직원이 데이터를 입력하는 방식에 따라 이것이 가장 효과적이라는 것을 알았습니다. 각 캐리지 리턴을 구분하는 인식 가능한 문자 패턴이있는 경우 찾기 / 바꾸기 작업을 수행하는 것이 더 쉽습니다. 필드에서 새 속성을 나타내는 데 사용합니다 (종종 적절한 필드에 넣을 수있는 속성 임에도 불구하고) 처음부터 두통을 구했습니다).

ArcGIS에서 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)  

"Assets \ Welds"를 적절한 fc 이름으로 바꾸고 row.REMARKS를 행으로 바꿉니다 (여기에 필드 이름 삽입).

위의 코드 예제를 시도하기 전에 아래의 가져 오기 행을 실행하거나 실행하지 않아도 될 수 있습니다.

import arcpy  
import string

나는 당신의 if 문이 들여 쓰기가 끝난 후에 당신의 진술을 한방에냅니다.
artwork21

잘 잡습니다 ... 작동하는 Python 명령 창 스크립트에서 복사 할 때 제대로 복사되지 않았습니다.
Zachary Ordo-GISP

4

Excel에서 시작된 기능 클래스 테이블 이후의 문제점은 다음 excel 명령을 사용하는 것입니다.

= 청소

모든 리턴 또는 개행 문자를 제거하는 메소드입니다. 그런 다음 테이블을 GIS 데이터베이스에 결합하거나 가져올 수 있습니다.


3

먼저 새 줄 문자를 선택하기 위해 SQL 문을 사용했습니다. 에서 Select By Attributes대화 상자 창 :

"MY_FIELD" LIKE '%
 %'

Enter첫 번째 % 다음 을 눌러야 합니다.


2
나는 이것이 새로운 줄 문자가있는 곳을 보여 주면서도 MY_FIELD.strip()일할 수는 없다는 것을 깨달았 지만 5 개의 레코드 만 가지고 있기 때문에 수동으로 편집했습니다.
Cindy Jayakumar

아마도 이런 식으로 선택하고 필드 계산기를 사용하여 Python 표현식으로 값을 다시 계산할 수 있습니다 !MY_FIELD![:-1]. 문자열 슬라이스는 개행 문자를 제거해야합니다 (개행 문자 뒤에 아무것도 없다고 가정하면 OP의 경우) .
nmpeterson

3

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

필드 계산기는 \nand와 같은 시퀀스를 이스케이프 처리 할 때 약간 혼란 스럽습니다 \t. 원시 문자 코드 만 사용하십시오.


아직도 이것으로 점점 SyntaxError: EOL while scanning string literal. VB 파서는 잘 작동합니다.
blah238

코드 블록이 아닌 표현식에서? 그리고 10.0에만?
Jason Scheirer

10.1 SP1의 표현식에서.
blah238

2
myString = "My text\n"

print myString.strip()

필드 계산기에서는 작동하지 않았습니다.
artwork21

Python 솔루션 또는 VBA (ArcGIS 9) 솔루션이 필요하십니까? strip (), rstrip () 및 lstrip ()은 끝의 문자 만 처리합니다. 문자열 중간에 있으면 .replace ( "\ n", "")
Dan

예, 필드 계산기 내에 파이썬 솔루션이 필요합니다. 반환은 문자열이 아닌 끝 부분에 있습니다. .replace ( "\ n", "")를 시도했지만 일반 000539 오류가 발생했습니다.
artwork21

이 숫자로 주어진 특정 Python 오류는 무엇입니까?
Dan

내 질문에 오류 메시지가 게시되었습니다.
artwork21

2

필자는 이것이 필드 계산기에서 사전 논리 스크립트 코드로 작동해야한다고 생각하지만 불행히도 그렇지 않습니다. 어쨌든 작업하기 위해 조정할 수있는 다른 방법을 제공하기 위해 게시했습니다.

def fix(teststring):
    parts = teststring.splitlines()
    newtest = ""
    for part in parts:
        newtest+=part
    return newtest

2

!field!따옴표와 원시 문자열 이니셜 라이저로 식에 선언을 래핑하십시오 ( 예 :) r"!field!".

시도해보십시오 str(!field!).


작동하지 않습니다. 나는 또한 MYFIELD.replace(r"\n",""), but it doesn't see that I've escaped the newline character, it just fails with a EOL` 오류를 시도했다 .
Cindy Jayakumar

당신은 맞습니다, 내 다른 대답을 참조하십시오. 후손을 위해 이것을 남겨 둡니다.
blah238
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.