#1 Tue 07 October 2014 11:03
- Loutre
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 12 Jan 2008
- Messages: 146
Commande Python
Bonjour à tous,
J'utilise actuellement un script Python qui me permet d'intégrer des données EDIGEO dans une MDB communale. Le script fonctionne bien, seulement quelquefois, les noms de lieux dépassent la longueur de mon champs concerné (LIBELLE). Il a une longueur TEXTE de 25.
J'aimerai modifier automatiquement la longueur de ce champs LIBELLE avant d'exécuter le script qui complète des MDB existante si j'avais déjà utilisé la commune.
Dans le cas où c'est une nouvelle commune, j'ai déjà programmé la bonne longueur donc pas de soucis lorsqu'il s'agit d'une nouvelle commune.
En somme, j'aimerai donc, que dans une MDB communale existante, dans la couche "Parcelles", je puisse modifié la longueur de mon champs LIBELLE à 55 au lieu de 25.
Est-ce qu'avec le module Arcpy, je peux faire ça ?
Bien cordialement,
Hors ligne
#2 Wed 08 October 2014 09:05
- grdfred
- Participant actif
- Lieu: nantes
- Date d'inscription: 17 Jul 2007
- Messages: 56
Re: Commande Python
Bonjour
Oui tu peux le faire, mais en plusieurs étapes, on ne peut pas modifier les caractéristiques d'un champ.
1 -il faut créer un champ temporaire avec les nouveaux paramètres, récupérer la valeur du champ LIBELLE (calculer un champ) puis supprimer ton champ initial,
2-créer le champ LIBELLE avec les bon paramètres, récupérer les valeurs et supprimer le champ temporaire.
Voici une fonction qui permet de renommer un champ :
Code:
#fonction renommer un champ def renommechamp(shape, chp_src, chp_cbl,typ,precision,decimales,longueur): champs = arcpy.ListFields(shape) for champ in champs: if champ.name == chp_src: champsuppr = champ.name expression = "[" + str(chp_src) + "]" arcpy.AddField_management(shape, str(chp_cbl), str(typ), str(precision),str(decimales),str(longueur)) arcpy.CalculateField_management(shape, chp_cbl, expression) arcpy.DeleteField_management(shape, champsuppr)
En faisant appelle à cette fonction à 2 reprises ça doit fonctionner. Attentio n c'est prévu pour des fichiers shape ou géodata fichier pas testé pour d'autre type géodata personelle.
Bonne journée
Hors ligne
#3 Wed 08 October 2014 13:45
- Loutre
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 12 Jan 2008
- Messages: 146
Re: Commande Python
Salut,
Merci de ta réponse, je vais tester ça.
Hors ligne
#4 Fri 17 October 2014 17:03
- Loutre
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 12 Jan 2008
- Messages: 146
Re: Commande Python
Je reviens vers vous pour indiquer que votre solution fonctionne.
Malgré tout, j'aimerai également supprimer les "'" (apostrophes), "-" (tirets) dans un champ LIBELLE de ma MDB. En effet je travail à partir de données EDIGEO que je récupère ensuite dans une MDB via un script Python.
Tout fonctionne sauf lorsque les noms de Lieux-dits s'ont composés comme ceci par exemple :
Code:
Ferme Haut-Levant ou Ferme d'Anjou.
Par conséquent, j'aimerai faire un calcul sur l'ensemble de ce champs avant l'intégration dans ma MDB en supprimant automatiquement dans l'ensemble des enregistrements de ma table les lieux-dits avec des tirets ou apostrophes. Est-ce possible ?
Merci
Par conséquent
Hors ligne
#5 Fri 17 October 2014 17:20
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: Commande Python
Bonjour,
vous pouvez utiliser la fonction replace pour éliminer les caractères génants
par exemple:
Code:
champLibelle= "Ferme d'Anjou" if "'" in champLibelle : newChamp=champLibelle.replace("'","") elif "-" in champLibelle: newChamp=champLibelle.replace("-","") else : newChamp = champLibelle
newChamp ne contiendra pas les caractères testés, par contre de mémoire ce ne sont pas les seuls caractères à éviter (é,è,ô,ï,...).
A+
Dernière modification par Nicolas Granier (Fri 17 October 2014 17:22)
Hors ligne
#6 Tue 21 October 2014 11:21
- Loutre
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 12 Jan 2008
- Messages: 146
Re: Commande Python
Bonjour,
Merci pour l'info, je vais essayer de mettre ça en place dans mon script alors
Merci
Hors ligne