Eu tenho uma tabela de geodatabase com um campo que estou tentando remover caracteres de retorno (nova linha). Encontrei este post ( como posso remover (chomp) uma nova linha no Python? ) De como fazê-lo, no entanto, ele não está funcionando na calculadora de campo. Aqui estão os trechos de código que eu tentei: O caractere de retorno da nota não está no final da string .
!myField!.rstrip()
OU
!myField!.rstrip('\n')
OU
!myField!.rstrip('\r\n')
OU
!myField!.replace('\n', '')
000539 erro fornecido para esta opção:
Descrição O cálculo usado pela ferramenta Calcular campo ou Calcular valor é inválido. Esta mensagem de erro fornecida listará o erro específico do Python.
Solução Este código de erro abrange vários erros do Python:
Exemplo de erro 1: exceptions.TypeError: não é possível concatenar os objetos 'str' e 'int'. O acima é um erro específico do Python. O cálculo está tentando adicionar ou concatenar uma sequência e um número.
Exemplo de erro 2: Forma do campo inválida @ distância O acima é um erro ao usar o objeto de geometria. O método da distância não é válido para o objeto geometry.
Para problemas específicos do Python, consulte a ajuda externa do Python para obter mais informações ou consulte a ajuda Calcular campo ou Calcular valor para obter mais informações sobre essas ferramentas.
OU
import os
def removeReturn(myField):
s = myField.rstrip(os.linesep)
return s
Alguma idéia de como remover caracteres de retorno usando a calculadora de campo?
SyntaxError: EOL while scanning string literal
erro?Respostas:
Eu acho que isso é apenas um bug / limitação do analisador Python com a ferramenta calculadora de campo / Calcular campo. Se uma nova linha for encontrada dentro do campo de texto,
SyntaxError: EOL while scanning string literal
ocorrerá uma, não importa o que você tente.Posso reproduzir o problema na 10.1 SP1 importando o seguinte arquivo CSV para um geodatabase, adicionando um campo e simplesmente tentando copiar o
Text
campo para o novo campo usando a Calculadora de Campos com o analisador Python ee a expressão!Text!
.Tente mudar para o analisador VB ou use um
UpdateCursor
e evite completamente a calculadora de campo.Esta questão também é discutida nos fóruns da ESRI, com as mesmas conclusões:
O único NIM relevante que eu pude encontrar foi o seguinte:
fonte
Há duas soluções possíveis que considero confiáveis. Por alguma razão, o CartoPac permite que as pessoas coloquem um retorno no campo OBSERVAÇÕES onde eu trabalho. Para se livrar deles, a solução que eu encontrei para trabalhar melhor é usar a Calculadora de Campo.
Mude seu analisador para Python. Coloque o seguinte em Código de script pré-lógico:
Coloque o seguinte na próxima caixa de texto (esta está trabalhando em um campo chamado OBSERVAÇÕES):
Quando o retorno do seu carro for removido, ele adicionará um espaço, - e um espaço entre cada linha. Você pode modificar "-" para um caractere ou conjunto de caracteres diferente, se desejar. Mas descobri que isso funciona melhor para mim com base na maneira como minhas equipes de construção inserem dados. É mais fácil executar operações Localizar / Substituir se houver padrões de caracteres reconhecíveis que quebram cada retorno de carro, que eles usam no campo para indicar um novo atributo (mesmo que seja um atributo que eles poderiam ter colocado no campo apropriado) e me salvou a dor de cabeça).
Se você preferir usar o Python Console no ArcGIS, pode modificar o acima para funcionar. No entanto, eu também tentei isso com algum sucesso no console Python:
Substitua "Assets \ Welds" pelo nome fc apropriado e substitua row.REMARKS pela linha. (Insira o nome do campo aqui)
Você pode ou não precisar executar as linhas de importação abaixo antes de tentar o exemplo de código acima:
fonte
A solução para isso desde que minha tabela de classes de recursos se originou no excel era usar o seguinte comando excel:
método para remover todos os caracteres de retorno ou nova linha. Você pode ingressar ou importar a tabela no seu banco de dados GIS.
fonte
Eu usei uma instrução SQL para selecionar primeiro os novos caracteres de linha. Na
Select By Attributes
janela de diálogo:Você precisa pressionar
Enter
após o primeiro%.fonte
MY_FIELD.strip()
trabalhar, mas como eu tinha apenas cinco registros, editei-os manualmente.!MY_FIELD![:-1]
- a fatia da string deve remover o caractere de nova linha (supondo que nada ocorra após a nova linha, o que parece ser o caso do OP) .!FieldName!.replace(chr(10), "").replace(chr(13), "")
A calculadora de campo é um pouco confusa quando se trata de escapar de seqüências como
\n
e\t
. Basta usar os códigos de caracteres brutos.fonte
SyntaxError: EOL while scanning string literal
com isso. O analisador VB funciona bem.fonte
Eu acho que isso deve funcionar como código de script pré-lógico na calculadora de campo - mas infelizmente parece que não. Publiquei de qualquer maneira, caso ele ofereça uma abordagem alternativa que você possa ajustar para começar a trabalhar.
fonte
Tente agrupar sua
!field!
declaração na expressão com aspas e um inicializador de string bruto , por exemplor"!field!"
.Tente
str(!field!)
também.fonte
MYFIELD.replace(r"\n",""), but it doesn't see that I've escaped the newline character, it just fails with a
erro EOL`.