#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