J'ai une table de géodatabase avec un champ que j'essaie de supprimer les caractères de retour (nouvelle ligne). J'ai trouvé ce post ( comment puis-je supprimer (chomp) une nouvelle ligne en Python? ) De la façon de le faire, mais il ne fonctionne pas dans la calculatrice de champ. Voici les extraits de code que j'ai essayés: Remarque : le caractère de retour n'est pas à la fin de la chaîne .
!myField!.rstrip()
OU
!myField!.rstrip('\n')
OU
!myField!.rstrip('\r\n')
OU
!myField!.replace('\n', '')
000539 erreur donnée pour cette option:
Description Le calcul utilisé par l'outil Calculer le champ ou Calculer la valeur n'est pas valide. Ce message d'erreur fourni répertorie l'erreur Python spécifique.
Solution Ce code d'erreur couvre un certain nombre d'erreurs Python:
Exemple d'erreur 1: exceptions.TypeError: impossible de concaténer les objets 'str' et 'int'. Ce qui précède est une erreur spécifique à Python. Le calcul tente d'ajouter ou de concaténer une chaîne et un nombre.
Exemple d'erreur 2: forme de champ non valide à distance Ce qui précède est une erreur d'utilisation de l'objet géométrique. La méthode de distance n'est pas une méthode valide de l'objet géométrique.
Pour des problèmes spécifiques à Python, consultez l'aide Python externe pour plus d'informations, ou consultez l'aide Calculer un champ ou Calculer une valeur pour plus d'informations sur ces outils.
OU
import os
def removeReturn(myField):
s = myField.rstrip(os.linesep)
return s
Des idées sur la façon de supprimer les caractères de retour à l'aide de la calculatrice de champ?
SyntaxError: EOL while scanning string literal
erreur?Réponses:
Je pense que ce n'est qu'un bug / limitation de l'analyseur Python avec l'outil de calculatrice de champ / Calculer le champ. Si une nouvelle ligne est rencontrée dans le champ de texte, une
SyntaxError: EOL while scanning string literal
se produit, peu importe ce que vous essayez.Je peux reproduire le problème dans 10.1 SP1 en important le fichier CSV suivant dans une géodatabase fichier, en ajoutant un champ et en essayant simplement de copier le
Text
champ dans le nouveau champ à l'aide de la calculatrice de champ avec l'analyseur Python et et l'expression!Text!
.Essayez de basculer vers l'analyseur VB ou d'utiliser un
UpdateCursor
et d'éviter complètement la calculatrice de champ.Cette question est également discutée sur les forums ESRI, avec les mêmes conclusions:
Le seul NIM pertinent que j'ai pu trouver était le suivant:
la source
Il y a deux solutions possibles que j'ai trouvées fiables. Pour une raison quelconque, CartoPac permet aux gens de mettre un retour dans le champ REMARQUES où je travaille. Pour s'en débarrasser, la solution que j'ai trouvée la plus efficace consiste à utiliser la calculatrice de champ.
Changez votre analyseur en Python. Mettez ce qui suit dans le code de script pré-logique:
Mettez ce qui suit dans la zone de texte suivante (celle-ci fonctionne sur un champ appelé REMARQUES):
Lorsque votre retour chariot sera supprimé, il ajoutera un espace, - et un espace entre chaque ligne. Vous pouvez modifier "-" en un autre caractère ou ensemble de caractères si vous le souhaitez. Mais j'ai trouvé que cela fonctionnait le mieux pour moi en fonction de la façon dont mes équipes de construction saisissaient les données. Il est plus facile de faire des opérations de recherche / remplacement s'il existe des modèles de caractères reconnaissables brisant chaque retour chariot, qu'ils utilisent dans le champ pour désigner un nouvel attribut (même s'il s'agit souvent d'un attribut qu'ils auraient pu simplement mettre dans le champ approprié et m'a sauvé le mal de tête en premier lieu).
Si vous préférez utiliser la console Python dans ArcGIS, vous pouvez modifier ce qui précède pour fonctionner. Cependant, j'ai également essayé cela avec un certain succès dans la console Python:
Remplacez "Assets \ Welds" par le nom fc approprié et remplacez row.REMARKS par row. (Insérez le nom du champ ici)
Vous pouvez ou non avoir besoin d'exécuter les lignes d'importation ci-dessous avant d'essayer l'exemple de code ci-dessus:
la source
La solution à ce problème, car ma table de classes d'entités est originaire d'Excel, était d'utiliser la commande Excel suivante:
pour supprimer tous les caractères de retour ou de nouvelle ligne. Vous pouvez ensuite joindre ou importer la table dans votre base de données SIG.
la source
J'ai utilisé une instruction SQL pour sélectionner d'abord les nouveaux caractères de ligne. Dans la
Select By Attributes
fenêtre de dialogue:Vous devez appuyer
Enter
après le premier%.la source
MY_FIELD.strip()
travailler, mais comme je n'avais que 5 enregistrements, je les ai modifiés manuellement.!MY_FIELD![:-1]
- la tranche de chaîne devrait supprimer le caractère de nouvelle ligne (en supposant que rien ne vient après la nouvelle ligne, ce qui semble être le cas pour l'OP) .!FieldName!.replace(chr(10), "").replace(chr(13), "")
La calculatrice de champ est un peu confuse quand il s'agit d'échapper des séquences comme
\n
et\t
. Utilisez simplement les codes de caractères bruts.la source
SyntaxError: EOL while scanning string literal
avec ça. L'analyseur VB fonctionne bien.la source
Je pense que cela devrait fonctionner en tant que code de script pré-logique dans la calculatrice de champ - mais malheureusement cela ne semble pas. Je l'ai quand même posté au cas où cela vous donnerait une approche alternative que vous pouvez modifier pour commencer à travailler.
la source
Essayez d'encapsuler votre
!field!
déclaration dans l'expression avec des guillemets et un initialiseur de chaîne brut , par exempler"!field!"
.Essayez
str(!field!)
aussi.la source
MYFIELD.replace(r"\n",""), but it doesn't see that I've escaped the newline character, it just fails with a
erreur EOL`.