Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#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: 55

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 wink

Merci smile

Hors ligne

 

Pied de page des forums

Powered by FluxBB