#1 Thu 10 December 2015 17:18
- Estelle_Geo
- Juste Inscrit !
- Date d'inscription: 15 Oct 2015
- Messages: 7
Python - Calculer un champ
Bonsoir à tous,
J'essaie d'ajouter et de calculer un nouveau champ à partir d’un autre champ de la même table au moyen d'une double boucle via la fenêtre python.
L'idée est d'attribuer un numéro identique chaque 8 entités. Exemple : Les entités ayant un ordre de 1 à 8 auront un 1 d'attribué dans le nouveau champs créé, les entités ayant un ordre de 9 à 17 auront un 2 et ainsi de suite...
Code:
# Chargement des variables inTable = "Atlas_PL" fieldName = "ATLAS_2" fieldPrecision = 9 expression = "Ordre()" code_block = """def Ordre(): i = 0 while !ORDRE! <= max(!ORDRE!): if !ORDRE!%8 == 0: i = i + 1 !ATLAS_2! = i else: !ATLAS_2! = i !ORDRE! = !ORDRE! + 1 return i """ # Ajout d'un champ ATLAS_2 arcpy.AddField_management(inTable, fieldName, "LONG", fieldPrecision, "", "", "NULLABLE") # Calcul du champ pour obtenir des arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON", code_block)
Le problème vient du bloc de code de l'expression Ordre() et relève probablement d'une erreur de syntaxe (ERROR 000989).
C'est la première fois que je calcule un nouveau champs via un code bloc et ne suis donc pas sûre de la syntaxe. Donc l'erreur est peut-être très flagrante pour les habitués.
Si quelqu'un a des suggestions/infos/conseils, merci d'avance
Bonne soirée.
Dernière modification par Estelle_Geo (Thu 10 December 2015 17:20)
Hors ligne
#2 Fri 11 December 2015 08:41
- lebon henri
- Participant actif
- Lieu: Vendée
- Date d'inscription: 14 Jan 2008
- Messages: 99
Re: Python - Calculer un champ
Salut, si t'es en version 10.1 ou plus, tu peux essayer de faire ça.
a+
Code:
import arcpy slice8 = 8 slice8increment = 0 numero = 1 with arcpy.da.UpdateCursor(r"Chemin de ma couche", ("Champ à mettre à jour")) as cursor: for row in cursor: slice8increment += 1 if slice8 < slice8increment: slice8 += 8 numero += 1 row[0] = numero cursor.updateRow(row)
Dernière modification par lebon henri (Fri 11 December 2015 08:42)
Hors ligne