Bonjour,
Je parcours des pages et des pages web sur l'encodage... Mais je finis toujours par m'y perdre.
Là, entre un dictionnaire et une définition qui l'utilise, je ne m'en sort pas.
Je travail sur un script avec les bibliothèques d'Arcgis (arcpy) et ma première ligne est # -*- coding: cp1252 -*-. Je suis en python 2.7.
Je converti un tableau excel qui me revient du terrain en géodatabase Arcgis. Puis je lis les valeurs.
Ces dernières remontent en unicode, ex; u'Ch\xeane', pour 'chêne'.
Je veux retrouver mes codes machines en fonction de ses valeurs.
J'ai donc un dictionnaire des essences forestières avec 1 code machine et un abréger.
...etc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 dico_cle_ess ={u'Alisier blanc':("324",u'Ab'),u'Alisier Torminal':("323",u'At'),u'Aucune':("224",u'Aucune'), u'Aulne Blanc':("aul_b",u'Ab'),u'Aulne Glutineux':("116",u'Ag'),u'Bouleau pubescent':("97",u'Bp'), u'Bouleau verruqueux':("96",u'Bv'), u'Ch\xeane':("439",u'Q'),u'Ch\xeane p\xe9doncul\xe9':("56",u'Qp'),u"Ch\xeane rouge d'Am\xe9rique":("57",u'Qra'), u'Ch\xeane sessile':("68",u'Qs'),u'Divers':("310",u'Div'), u'Douglas':("111",u'Do'),u'Epic\xe9a commun':("100",u'Ec'), u'Erable champ\xeatre':("71",u'Ec'),u'Erable plane':("70",u'Ep'),u'Erable sycomore':("69",u'Es'), u'Fr\xeane commun':("80",u'Fc')}
Si je fais un simple :Pas de soucis, j'ai la bonne réponse ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part dico_cle_ess[u'Fr\xeane commun']Mais comme je vais régulièrement interroger mon dictionnaire et que certaines essences anecdotiques peuvent ne pas être dedans. J'ai créé une définition pour gérer cela.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ('80', u'Fc')
Mais je n'ai que des retour avec le code '224'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 def code_ess(lib): try: return dico_cle_ess[lib][0].upper() except: print "ESSENCE non trouver" finally: return "224"
J'ai donc fait des tests sans 'try/except':
Et là, Oh! surprise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 def code_ess(lib): print lib return dico_cle_ess[lib][0].upper()!!! Le print dans ma définition, affiche non pas u'Fr\xeane commun', mais Frêne commun. Du coup, la clef de mon dico plante
:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Traceback (most recent call last): File "<pyshell#53>", line 1, in <module> code_ess(u'Fr\xeane commun') File "<pyshell#48>", line 5, in code_ess return dico_cle_ess[repr(lib)] KeyError: "u'Fr\\xeane commun'"
Est-ce ma variable 'lib' qui réencode ma variable d'origine ou seulement mon print?
Pourquoi cherche-t-il une Key "u'Fr\\xeane commun'", alors que ma variable de départ ne contient pas 2 '\'?
Auriez-vous quelques réponses svp? et/ou solutions svp? Je tourne en boucle là...![]()
Partager