Pages: 1
- Sujet précédent - ArcGIS 10.2 : erreur python depuis migration depuis ArcGIS 10 - Sujet suivant
#1 Wed 29 June 2016 12:05
- JPr31
- Participant occasionnel
- Date d'inscription: 7 Jun 2012
- Messages: 15
ArcGIS 10.2 : erreur python depuis migration depuis ArcGIS 10
Bonjour,
Ma société a migré de Arcgis 10 à Arcgis 10.2 depuis 2 mois. Mon soucis vient du fait qu'un script python qui fonctionnait parfaitement sous la version 10, change mes résultats depuis la passage à la version 10.2
Pour être plus précis, je récupère des valeurs de 2 champs différents, que je concatène dans un nouveau champ.
Il y a la récupération d'un texte (par exemple polyéthylène) et d'un nombre (par exemple 50).
Ces 2 valeurs sont concaténées dans un nouveau champ pour donner (pour ici: PE 50).
Depuis le changement de version d'Arcgis, j'obtiens comme résultat : PE 50.0
Je ne comprends pas pourquoi mon Calculate.field me rajoute un .0 à tous mes résultats.
Si vous avez des idées je suis preneur (je peux mettre mon code en exemple au cas ou)
Merci d'avance
Dernière modification par JPr31 (Wed 29 June 2016 13:50)
Hors ligne
#3 Thu 30 June 2016 10:30
- JPr31
- Participant occasionnel
- Date d'inscription: 7 Jun 2012
- Messages: 15
Re: ArcGIS 10.2 : erreur python depuis migration depuis ArcGIS 10
Bonjour,
Voici le code
Merci d'avance,
cdlt,
Code:
from __future__ import unicode_literals import arcpy mxd = arcpy.mapping.MapDocument("CURRENT") path = arcpy.GetParameterAsText(0) #récupère la couche choisie en entrée ######################################################################################################################### ######################################################################################################################### ######################################################################################################################### expression = "getDN(!Diametre!,!Materiau!,!Nature!,!Utilisatio!)" codeblock = """ def getDN(Diametre, Materiau, Nature, Utilisatio): if Materiau == 'Acier' and Utilisatio != 'BRC' and Diametre != 0: if Nature == 'Centriflex': Nat = 'ACX' else: Nat = 'A' elif Materiau == 'Aluminium' and Utilisatio != 'BRC' and Diametre != 0: Nat = 'Al' elif Materiau == 'Amiante ciment' and Utilisatio != 'BRC' and Diametre != 0: Nat = 'AC' elif Materiau == 'Béton' and Utilisatio != 'BRC' and Diametre != 0: Nat = 'B' elif Materiau == 'Caoutchouc' and Utilisatio != 'BRC' and Diametre != 0: Nat = 'C' elif Materiau == 'Composite' and Utilisatio != 'BRC' and Diametre != 0: if Nature == 'PRV': Nat = 'PRV' else: Nat = 'PY' elif Materiau == 'Fonte' and Utilisatio != 'BRC' and Diametre != 0: if Nature == 'Fonte ductile' or Nature == 'Fonte ductile type jf' or Nature == 'Fonte ductile type standard' or Nature == 'Fonte ductile TAG 32': Nat = 'FD' elif Nature == 'Fonte grise' or Nature == 'Fonte grise type express' or Nature == 'Fonte grise type standard' or Nature == 'Fonte grise type plomb': Nat = 'FG' elif Nature =='Fonte TT': Nat = 'FT' elif Nature =='Blue Top': Nat ='FB' elif Nature =='Fonte intégrale': Nat ='FI' else: Nat = 'F' elif Materiau == 'Grés' and Utilisatio != 'BRC' and Diametre != 0: Nat = 'G' elif Materiau == 'Inox' and Utilisatio != 'BRC' and Diametre != 0: Nat = 'I' elif Materiau == 'Pvc' and Utilisatio != 'BRC' and Diametre != 0: if Nature == 'Pvc renforcé': Nat = 'PVCr' elif Nature == 'Pvc Bi-orienté': Nat = 'PVCbo' else: Nat = 'PVC' elif Materiau == 'Plomb' and Utilisatio != 'BRC' and Diametre != 0: if Nature == 'Plomb réhabilité': Nat = 'PBrh' else: Nat = 'PB' elif Materiau == 'Polyéthylène' and Utilisatio != 'BRC' and Diametre != 0: if Nature == 'Polyéthylène expansé basse densitè': Nat = 'PEBd' elif Nature == 'Polyéthylène expansé haute densité': Nat = 'PEHd' elif Nature == 'Polyfluorure de vinylidène': Nat = 'PEHd PVDF' elif Nature == 'Polybleu RD': Nat = 'PEHd RD' else: Nat = 'PE' elif Materiau == 'Drain' and Utilisatio != 'BRC' and Diametre != 0: Nat = 'D' else: Nat = ' ' if Diametre != 0 and Utilisatio == 'TRC' and Materiau != 'Inconnu': diam = Diametre else: diam = ' ' return Nat +' '+ str(diam)""" ######################################################################################################################### ################################################## ######################################################################################################################### arcpy.AddField_management(path,"DN","TEXT") arcpy.CalculateField_management(path,"DN",expression,"PYTHON_9.3",codeblock) ######################################################################################################################### ##################################################################################### ######################################################################################################################### input_feature_class = path input_layer_file = br"chemin_acces couche lyr" df = arcpy.mapping.ListDataFrames(mxd)[0] layer_file_object = arcpy.mapping.Layer(input_layer_file) original_fc_name = str(layer_file_object.name) input_layer_object = arcpy.mapping.ListLayers(mxd, input_feature_class)[0] input_fc_name = str(input_layer_object.datasetName) input_fc_toc_name = str(input_layer_object.name) input_fc_workspace = str(input_layer_object.workspacePath) workspace_id = str(arcpy.Describe(input_fc_workspace).workspaceFactoryProgID) if workspace_id == "esriDataSourcesGDB.AccessWorkspaceFactory.1": workspace_type = "ACCESS_WORKSPACE" elif workspace_id == "esriDataSourcesGDB.FileGDBWorkspaceFactory.1": workspace_type = "FILEGDB_WORKSPACE" elif workspace_id == "esriDataSourcesGDB.SdeWorkspaceFactory.1": workspace_type = "SDE_WORKSPACE" else: workspace_type = "SHAPEFILE_WORKSPACE" arcpy.mapping.UpdateLayer(df, input_layer_object, layer_file_object, False) refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0] refocus_layer.replaceDataSource(input_fc_workspace, workspace_type, input_fc_name) refocus_layer.name = input_fc_toc_name arcpy.RefreshTOC() arcpy.RefreshActiveView()
Dernière modification par JPr31 (Thu 30 June 2016 11:30)
Hors ligne
#4 Thu 30 June 2016 16:10
Re: ArcGIS 10.2 : erreur python depuis migration depuis ArcGIS 10
Bonjour,
Je ne sais pas pourquoi cela ne fonctionne plus en version 10.2, le changement de la version de Python ?
Mais, si tu remplace ce code :
Code:
return Nat +' '+ str(diam)"""
par celui-ci :
Code:
return '{0} {1:.0f}'.format(Nat, diam)"""
, cela fonctionnera peut-être comme avant...
A+
Franck
Hors ligne
#5 Thu 30 June 2016 16:26
- JPr31
- Participant occasionnel
- Date d'inscription: 7 Jun 2012
- Messages: 15
Re: ArcGIS 10.2 : erreur python depuis migration depuis ArcGIS 10
Alors il y a du nouveau et une erreur.
Si je remplace par
Code:
return '{0} {1:.0f}'.format(Nat, diam)"""
la moulinette me met une erreur
Code:
Traceback (most recent call last): File "U:\PYTHON\etiquettes DN_MATERIAU\Etiquettes_Dn_Materiau_AEP.py", line 90, in <module> arcpy.CalculateField_management(path,"DN",expression,"PYTHON_9.3",codeblock) File "d:\arcgis\desktop10.2\arcpy\arcpy\management.py", line 3354, in CalculateField raise e ExecuteError: ERROR 000539: Error running expression: getDN(0.0,u"Inconnu",u"Inconnu",u"TRC") Traceback (most recent call last): File "<expression>", line 1, in <module> File "<string>", line 70, in getDN ValueError: Unknown format code 'f' for object of type 'str' Ãchec de lâexécution de (CalculateField). Échec de l’exécution de (Etiquettes).
En fait le script ne finit pas son action, mais il réussit à me créer le nouveau champ avec quelques valeurs.... où le ".0" n’apparaît plus. Donc y'a du positif dans ton aide....
Mais ma moulinette ne marche plus
Hors ligne
#6 Fri 01 July 2016 07:41
Re: ArcGIS 10.2 : erreur python depuis migration depuis ArcGIS 10
Bonjour,
J'y ai pensé ce matin au petit déj... ma solution ne pouvait pas fonctionner complètement
Le type des variables et leur conversion en chaîne de caractères est mal géré...
Le correctif serait plutôt ceci :
Code:
if Diametre != 0 and Utilisatio == 'TRC' and Materiau != 'Inconnu': diam = '{0:.0f}'.format(Diametre) #conversion du type flottant en string else: diam = ' ' return '{0} {1}'.format(Nat, diam)"""
Bonne journée
Franck
PS : la doc de la méthode format() qui permet de géréer les conversion en chaîne de caractères d'autres types de données
Hors ligne
#7 Tue 12 July 2016 09:18
- JPr31
- Participant occasionnel
- Date d'inscription: 7 Jun 2012
- Messages: 15
Re: ArcGIS 10.2 : erreur python depuis migration depuis ArcGIS 10
Cela marche, merci de votre aide.
Je n'avais pas pu tester avant pour vous répondre.
bonne journée
Hors ligne
Pages: 1
- Sujet précédent - ArcGIS 10.2 : erreur python depuis migration depuis ArcGIS 10 - Sujet suivant