Rechercher / remplacer des guillemets doubles à l'aide de Python Parser of ArcGIS Field Calculator?


16

J'essaie d'utiliser le calculateur de champ (ArcMap 10.0) pour supprimer les guillemets doubles dans un champ d'adresse (je ne les ai pas mis là-dedans, croyez-moi). J'ai essayé de nombreuses incantations mais je n'arrive toujours pas à décoller avec un calcul. oui, les deux champs sont des chaînes et les deux sont de longueur acceptable.

Ce calcul: Exemple de calcul

Résultats en ceci:

échouer

Avec ce message d'erreur dans la boîte de dialogue Résultats:

Message d'erreur

Et je le répète, je ne les ai pas mis dedans.


1
Donc, vous les copiez avec les citations dans votre test, avez-vous déjà tenté de supprimer les citations avec quelque chose comme!testing![1:len(!testing!)-1]
Roy

L'extrait que vous avez fourni meurt avec le même message.
valveLondon

Réponses:


16

J'ai trouvé que dans 10.0 Field Calculator, c'est assez bizarre.

Mais j'ai réussi à le faire fonctionner. L'idée principale est de mettre le nom du champ entre guillemets simples.

Exemple. supposons que nous ayons des champs text1et text2. Plutôt que de calculer le terrain text2avec l' expression !text1!, ce qui va probablement échouer, essayez celui - ci: '!text1'. Comme vous le voyez, j'utilise des guillemets simples ici.

Revenons donc à votre tâche. Il sera plus clair d'utiliser le code de script pré-logique:

def calc(value):
    return value.replace('"', '')

L'expression sera:

calc('!text1!')

J'espère que cela fonctionnera pour vous.

Je n'ai pas expérimenté plus loin, mais je pense qu'un tel comportement étrange se produit car le calcul du champ est traduit dans l'appel à l'outil ArcToolbox CalculateField_managementet l'expression est fournie en tant que paramètre (probablement également en plus avec des guillemets simples ou doubles).

MISE À JOUR:

Ma solution précédente échouera au cas où il y aurait des guillemets simples dans les valeurs de champ text1.

Maintenant, j'ai réussi à le faire fonctionner au cas où il y aurait des caractères 'et "(guillemets simples et doubles) à l'intérieur d'une valeur d'attribut text1.

Voici l'expression, qui renverra la chaîne d'origine, prenant en charge les deux types de guillemets:

'''!text1!'''[1:-1]

Pour votre tâche, il peut être étendu à (sans code de script pré-logique):

'''!text1!'''[1:-1].replace('"', '')

Eh bien, vous avez espéré, mais cela ne fonctionne pas pour moi. Ni le codeblock ni le straight up'!testing!'
valveLondon

Hm, cela a fonctionné sur mon 10.0sp4. C'est peut-être parce que quelque part dans votre domaine, il y a en fait un guillemet simple ... Avez-vous envisagé d'utiliser UpdateCursor dans un script python?
Alex Markov

2
Vous savez quoi? vous avez raison, ça marche. Je n'avais pas eu mon jus de réveil à 3h00. Vous gagnez.
valveLondon

J'ai réussi à résoudre le problème avec un seul devis. Vérifiez ma mise à jour de la réponse.
Alex Markov

Le code de script pré-logique a bien fonctionné lorsqu'il est utilisé dans un script - merci beaucoup
meryloo

10

Si vous utilisez la version 10.1 et que vous êtes sûr de vouloir vous débarrasser de chaque instance de guillemets doubles que vous pouvez utiliser:

!testing!.replace("\"","")

Si quelqu'un sait pourquoi cela fonctionne en 10.1 et non en 10.0, je serais intéressé.

Voici l'entrée des résultats de ma course.

entrez la description de l'image ici


Quel est le tour de magie ici, votre script n'a pas fonctionné?
artwork21

Ça ne marche pas. Il semble que ce soit le cas, mais ce n'est pas le cas.
KiloGeo

Vos deux champs ont un texte correct?
TurboGus

@Gus, le champ Oui est du texte.
artwork21

2
Je n'utilise pas 10.1. J'utilise 10.0 - cette version archaïque qui est sooooo 2011.
valveLondon

8

Voici une manière non scriptée de le faire.

  1. Commencez la session d'édition sur votre calque.
  2. Ouvrez le tableau et mettez en surbrillance la colonne du champ.
  3. Sélectionnez la flèche déroulante Options de tableau et sélectionnez Rechercher et remplacer.
  4. Sélectionnez l'onglet Remplacer et entrez Rechercher ":, sélectionnez Remplacer tout (vous devrez cliquer deux fois sur le bouton Remplacer tout).

bien que j'apprécie la possibilité, je ne veux pas seulement remplacer les guillemets doubles et je préfère travailler via des scripts.
valveLondon

3

Une approche hybride a fonctionné sur mon système:

'!testing!'.replace("\"","")

2

Je n'ai pas essayé cela à l'intérieur d'Arc, mais j'ai pu supprimer les guillemets doubles d'une chaîne dans un IDE Python de cette manière (rapide):

aStr ='"test"'

a1 = aStr.lstrip('"')
a2 = a1.rstrip('"')

print a2

a2 imprime le test, sans guillemets.


Je me rends compte que cela n'aide pas avec la partie «Trouver» de votre question ...
Timothy Michael

0

salut essayez d'utiliser des guillemets simples comme celui-ci! test! .replace ('"', '')


Salut, cela ne fonctionne pas.
valveLondon

0

Je l'ai trouvé assez facile avec l'ancienne fonction VBScript: Replace ([testing],"""","")

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.