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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Thu 06 March 2014 09:30

Anaïs Just
Participant actif
Lieu: Montreuil
Date d'inscription: 10 Dec 2007
Messages: 131

ArcPy: création d'une liste à partir d'une table

Bonjour à tous,

J'ai réalisé une script python pour Arcgis (librairie arcpy) qui utilise une boucle for sur une liste à 2 dimension avec 3 fois x éléments de type:
[("code1","nom1","compteur1"),("code2","nom2","compteur2"),......,("codex","nomx","compteurx")]
Les trois éléments entre parenthèse sont des variables que j'utilise à chaque itération de la boucle.

Mon problème est que je rentre la liste en dur dans le script.
Dans le cas où la liste est courte (10 itérations/lignes) ce n'est pas un problème mais dans le cas où j'ai des milliers de lignes dans ma liste j'aimerais pouvoir faire appel à une table plutôt que de coder la liste en dur (par exemple un fichier texte ou csv ou même une table postgresql).

Savez vous comment je pourrais m'y prendre?
Arcpy dispose-t-il de ce genre de fonction?


Merci d'avance!

Hors ligne

 

#2 Thu 06 March 2014 12:39

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: ArcPy: création d'une liste à partir d'une table

Bonour,

Lire un fichier texte via Python est très simple, ci dessous une solution parmi beaucoup d'autres:

Code:

for line in open(fichier.txt):
    print(line.strip().split(','))
    #Notes:
    #strip() permet d'éliminer le caractère de retour chariot
    #split() permet de découper la chaine dans une liste selon un spérateur spécifié

Hors ligne

 

#3 Fri 07 March 2014 10:32

Anaïs Just
Participant actif
Lieu: Montreuil
Date d'inscription: 10 Dec 2007
Messages: 131

Re: ArcPy: création d'une liste à partir d'une table

Merci beaucoup pour cette réponse. Ok pour ouvrir le fichier texte. J'ai aussi trouvé comment lire un fichier csv
http://www.commentcamarche.net/faq/2382 … chiers-csv
mais en revanche je ne sais pas trop comment faire l'équivalent de ça:

Code:

liste=[("code1","nom1","compteur1"),("code2","nom2","compteur2"),......,("codex","nomx","compteurx")]


#############################################################################
# EXPORT DE CARTES


print "A: Création des cartes png pour chaque code"
for elementcode,elementnom,compteur in listecodetaxref:

...listedinstructionsutilisantcestroisvariables

en parcourant le fichier csv qui se présente de la façon suivante ( Pour résumer j'ai compris comment l'ouvrir mais pas comment le parcourir dans une boucle for de la même façon que je parcourt ma liste)

Code:

code1    nom1    compteur1
code2    nom2    compteur2
....    ... ....
codex    nomx    compteurx

Merci encore pour votre aide

Dernière modification par Anaïs Just (Fri 07 March 2014 10:35)

Hors ligne

 

#4 Fri 07 March 2014 11:29

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: ArcPy: création d'une liste à partir d'une table

Bonjour,
Vous pouvez faire comme ceci

Code:

f=open("c:/votrefichiercsv.csv",'r')  #ouverture en mode lecture du fichier csv
liste=[] #initialisation d'une liste vide
ligne= f.readline() #soit f le pointeur vers votre fichier csv,
while ligne!='' : # soit tant que la ligne n'est pas vide
    ligne_separee = ligne.split("    ") # entre guillemet le séparateur ici une tabulation
    code = ligne_separee [0]
    nom = ligne_separee [1]
    compeur = ligne_separee [2]
    liste.append((code,nom,compteur)) #on ajoute à la liste, la liste des éléments d'une ligne
    ligne= f.readline()  #valeur de la ligne suivante 

print liste #affichage de votre liste

COrdialement
Nicolas GRANIER

Dernière modification par Nicolas Granier (Fri 07 March 2014 11:31)

Hors ligne

 

#5 Fri 07 March 2014 11:46

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: ArcPy: création d'une liste à partir d'une table

Un CSV n'est rien d'autre qu'un fichier texte dans lequel pour chaque ligne les valeurs sont séparées par un caractère particulier en général la virgule d'où son nom coma separated value. Donc si vous savez lire et écrire un fichier texte vous savez lire et écrire un CSV.

Reprenez mon exemple vous avez tous ce qu'il faut pour parcourir les données de votre fichier :

si le séparateur est la virgule:
code1,nom1,compteur1
code2,nom2,compteur2
....

Code:

for line in open(fichier.txt):
    code, nom, compteur = line.strip().split(',')

Pour un autre séparateur modifiez le paramètre de la fonction split

Vous pouvez aussi extraire toutes les lignes d'un coup dans une liste mais dans ce cas toute les données sont en mémoire ce qui peut être problématique si le volume est important


Code:

f = open(path, "r")
lines = f.readlines()
f.close()
for line in lines:
    code, nom, compteur = line.split(',')

Dernière modification par dominique.lys (Fri 07 March 2014 11:48)

Hors ligne

 

#6 Mon 10 March 2014 15:13

Anaïs Just
Participant actif
Lieu: Montreuil
Date d'inscription: 10 Dec 2007
Messages: 131

Re: ArcPy: création d'une liste à partir d'une table

Merci à tous deux pour vos réponses!
Je testerais ça et je vous tiendrais au courant.

Hors ligne

 

Pied de page des forums

Powered by FluxBB