banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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 smile

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

 

Pied de page des forums

Powered by FluxBB