Suite

Listes dans le calculateur de champs dans ArcMap ?


Quelqu'un pourrait-il m'indiquer pourquoi cela ne fonctionne pas. J'essaie de convertir toutes les instances de '02ND' en '2ND', par exemple où certains des champs de saisie (f1) sont déjà convertis et d'autres non.

En bloc de code :

def calc(f1) : liste=['01ST', '02ND', '03RD', '04TH', '05TH', '06TH', '07TH', '08TH', '09TH'] pour i dans la liste : si je dans f1 : f1 = f1.replace('0',") return f1.replace('0',") else : return f1

J'appelle simplement la fonction calc pour remplir un nouveau champ.


Vous pouvez simplement vérifier si la valeur de votre champ est dans la liste de suppression :

def remove_zero(field): remove_list = ['01ST', '02ND', '03RD', '04TH', '05TH', '06TH', '07TH', '08TH', '09TH'] si le champ dans remove_list : field = field.replace('0',") return field else: return field

Ensuite, vous voudrez faire :

remove_zero(!FIELDNAME!)

Une explication un peu pourquoi la fonction de l'OP ne fonctionne pas:

f1 = une chaîne

liste= une liste

Lorsque vous parcourez la liste, pour chaque membre de la liste, vous obtiendrez soit positif ou alors négatif réponse. Votre liste compte donc neuf membres ; vous obtiendrez neuf réponses (+ et -). Alors qu'est-ce que le calc la fonction reviendra, neuf réponses entières ou une ? Bien sûr, la fonction python ne renverra qu'un seul dans ce cas. Depuis seulement un le retour est autorisé donc calc la fonction renvoie la réponse pour le dernier membre, c'est-à-dire'09E' et vous obtiendrez toutes les instances de « 09TH » sans « 0 » en tête mais rien à propos de toutes les autres instances, par exemple '01ST', '02ND', '03RD', '04TH', '05TH', '06TH', '07TH', '08TH'.

Solution:

Pas besoin de parcourir la liste, vérifiez simplement si f1 est dans la liste.

def calc(f1) : liste = ['01ST', '02ND', '03RD', '04TH', '05TH', '06TH', '07TH', '08TH', '09TH'] si f1 dans la liste : f1 = f1.replace('0',") return f1 else: return f1

N.B. Evitez la déclaration de variable avec des mots réservés. Vous avez défini un variable de liste nommé liste, la liste est un mot réservé de python.


Dans ce cas, la même chose pourrait être accomplie avec!NomChamp!.lstrip("0").


Voir la vidéo: ArcGis - Cours 2: Couches et importation de tableaux dans ArcMap (Octobre 2021).