#1 Tue 18 September 2012 09:40
- supernul
- Participant actif
- Date d'inscription: 31 Jan 2010
- Messages: 103
[ARCGIS 10] ModelBuilder : itération sur fichier txt
Bonjour à tous,
je précise tout de suite que j'ai posté la même question sur forumsig ici :
http://www.forumsig.org/showpost.php?p= … ostcount=1
mais je me permets de poste également ici dans l'espoir qu'un membre de Georezo qui n'ait pas vu le sujet sur forumsig aurait une idée.
Je dispose de 800 fichiers .txt qui comportent des coordonnées XY et plutôt que de passer plusieurs mois à faire le même traitement sur chaque, j'ai créé un modèle avec ModelBuilder. Le modèle fonctionne bien si je rentre le nom du fichier en entrée mais je voudrais aller plus loin dans l'automatisation en utilisant un itérateur (itérateur fichier).
Cependant la sortie de cet itérateur ne peut être utiliser que comme condition dans le modèle et pas comme entrée.
Ci-dessous le début de mon modèle :
[img]http://www.forumsig.org/attachment.php?attachmentid=5218&stc=1&thumb=1&d=1347616955[/img]
Merci d'avance.
EDIt modération : fichier image ajouté > il faut être inscrit sur FS pour y accéder.
Dernière modification par Robin (Tue 18 September 2012 10:21)
Hors ligne
#2 Tue 18 September 2012 17:14
- Squid
- Participant actif
- Date d'inscription: 2 Apr 2010
- Messages: 109
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
-Peut être que vous pouvez créer une variable de type fichier texte.
-Passer cette variable en paramètre du modèle
-Puis faire propriété en cliquant gauche dessus. La mettre en valeur multiple.
-Ajouter itérer fichiers
-Relier la première variable multiple au module itérer
-Nommer la sortie "Nom" (du fichier texte lu) par exemple "nom fichier lu"
-Puis dans votre Model builder initial entrer le chemin du dossier où se trouvent les fichiesr suivi du nom de la variable entre %:
Chemin\du\dossier\%nom fichier lu% (ajouter éventuellement l'extention du fichier à la fin)
Dernière modification par Squid (Tue 18 September 2012 17:25)
Hors ligne
#3 Wed 19 September 2012 08:51
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
Bonjour,
perso je procèderai de cette manière. Une fois que le modèle fonctionne bien pour un fichier txt uniquement, je l'exporterai en python.
Dans le script généré, il "suffira" d'écrire une boucle qui pointe vers le dossier contenant tous les fichiers txt, de rajouter une variable pour le nom des fichiers à générer en sortie et le tour est joué ().
Pas si simple si on ne connait rien au python, mais je pense qu'il sera beaucoup plus rapide de se mettre à python que de passer les 800 fichiers TXT.
A+
Hors ligne
#4 Wed 19 September 2012 17:42
- supernul
- Participant actif
- Date d'inscription: 31 Jan 2010
- Messages: 103
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
J'ai exploré d'autres pistes, notamment la transformation du fichier txt en shp grâce à python et shapefile. Ceci me donne un résultat inattendu mais un résultat tout de même.
Ce résultat me conduit à la solution de Nicolas : modèle pour un fichier dans Arcgis, export en python et écriture d'une boucle propre.
Merci de vos réponses.
PS : Je ne sais pas comment ils font chez ESRI mais mon script transforme un txt en shp plus rapidement que leur outil "générer une couche tabulaire".
Hors ligne
#5 Thu 20 September 2012 08:07
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
PS : Je ne sais pas comment ils font chez ESRI mais mon script transforme un txt en shp plus rapidement que leur outil "générer une couche tabulaire".
Sur de lourds traitements un script python (utilisant arcpy) exécuté en mode console est bien plus rapide qu'un traitement Arcgis - Model Builder équivalent.
J'ai l'impression que l'environnement Arcgis "bride" le processus, mais avec l'avantage d'apporter une plus grande stabilité.
Mais ça c'est un autre sujet.
A+
Hors ligne
#6 Wed 12 November 2014 13:39
- Sprumont F
- Juste Inscrit !
- Date d'inscription: 1 Dec 2009
- Messages: 8
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
Bonjour,
J'ai le meme probleme (iteration avec des fichiers TXT dans model builder) et je ne connais rien a Python.
J'ai utilisé model builder pour faire un modèle qui fonctionne avec un fichier (dans ce cas, conversion de plusieurs txt d'un dossier en .lyr).
J'ai fait l'export en python mais je ne sais pas comment creer cette fameuse boucle...
Des infos a me donner ?
Hors ligne
#7 Wed 12 November 2014 16:14
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
Bonjour,
poster l'exemple du script fonctionnant sur un fichier texte et je vous donnerai les lignes à rajouter.
A+
Nicolas GRANIER
Hors ligne
#8 Wed 12 November 2014 16:48
- Sprumont F
- Juste Inscrit !
- Date d'inscription: 1 Dec 2009
- Messages: 8
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
Bonjour,
Merci pour la rapidite de votre reponse.
Ci dessous, le code python apres l'export a partir du model builder.
Les fichiers textes sont dans le dossier "3353301058935391" ("C:\\Users\\francois.sprumont\\Desktop\\paola\\3353301058935391").
Merci pour votre aide.
francois
Code:
# -*- coding: utf-8 -*- # --------------------------------------------------------------------------- # python.py # Created on: 2014-11-12 12:36:54.00000 # (generated by ArcGIS/ModelBuilder) # Description: # --------------------------------------------------------------------------- # Import arcpy module import arcpy # Local variables: v353301058935391_0_txt = "C:\\Users\\francois.sprumont\\Desktop\\paola\\3353301058935391\\353301058935391_0.txt" popo = "popo" popo_lyr = "C:\\Users\\francois.sprumont\\Desktop\\paola\\test\\popo.lyr" # Process: Make XY Event Layer arcpy.MakeXYEventLayer_management(v353301058935391_0_txt, "x", "y", popo, "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]];-400 -400 1000000000;-100000 10000;-100000 10000;8.98315284119522E-09;0.001;0.001;IsHighPrecision", "") # Process: Save To Layer File arcpy.SaveToLayerFile_management(popo, popo_lyr, "", "CURRENT")
Hors ligne
#9 Wed 12 November 2014 17:24
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
Alors voici, je n'ai pas testé mais l'idée est là.
Code:
# -*- coding: utf-8 -*- import arcpy import os #import de la librairie de l OS qui permet d acceder a tout un tas de fonctions standarts dossier = "C:/Users/francois.sprumont/Desktop/paola/3353301058935391" #dans le doute entre \ et / mettre toujours / #creation de la boucle compteur=0 for fichierTXT in os.listdir(dossier) : #os.listdir permet de lister tous le contenu du dossier, attention il ne doit y avoir que des txt #a partir d ici on fait le traitement pour un fichier texte a la fois. il suffit d amenager un peu les variables #variable en entree pathFichierTXT = dossier + "//" + fichierTXT compteur+=1 print compteur print pathFichierTXT # variable de sortie temporaire popo="popo" + str(compteur) #le rajout du compteur dans le nom permet de ne pas reprendre toujours le meme nom du fichier temporaire de sortie et evite les problemes #traitement arcpy.MakeXYEventLayer_management(pathFichierTXT, "x", "y", popo, "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]];-400 -400 1000000000;-100000 10000;-100000 10000;8.98315284119522E-09;0.001;0.001;IsHighPrecision", "") #export repertoireExport = "C:/Users/francois.sprumont/Desktop/paola/test" fichierExport = repertoireExport +"//" + fichierTXT[:len(fichierTXT)-3] +"shp" # on cree un nom de sortie et on remplace l extension txt par shp arcpy.CopyFeatures_management (popo,fichierExport) #copyFeature produit un shp, alors que saveToLayerFile produit un lyr, l un ou l'autre doit marcher
A lancer depuis la console ou depuis la fenêtre python d'argis, pour ma part je vous conseillerai d'enregistrer ce script dans un fichier py et de l'executer dans la console
Dernière modification par Nicolas Granier (Wed 12 November 2014 17:27)
Hors ligne
#10 Thu 13 November 2014 11:07
- Sprumont F
- Juste Inscrit !
- Date d'inscription: 1 Dec 2009
- Messages: 8
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
Bonjour,
Ca marche ! Encore merci pour le script et les annotations, c'est super !
Evidemment cette solution me satisfait mais ne me comble pas totalement.
1) a quoi sert le model builder si on est obligé de passer par un script python
2)Comment font ceux qui n'y connaissent rien en Python (entre autre, moi).
Je crois que j'ai pas trop le choix et que je vais devoir m'investir un peu...
Encore merci
Hors ligne
#11 Thu 13 November 2014 11:16
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
Encore merci pour le script et les annotations, c'est super !
Les annotations c'est pour vous lancer vers la solution qui vous comblera totalement.
1) a quoi sert le model builder si on est obligé de passer par un script python
Attention, la solution que je propose ne signifie pas qu'il n'est pas possible de le faire avec le modèle builder, je pense d'ailleurs que c'est possible.
Dans mon utilisation le modèle builder sert à deux choses :
- enchainer des traitements simples (ajout de champ, calcul de champ, réalisation de jointure...)
- Obtenir le nom de l'outil pour l'utiliser dans un script python en exportant le modèle.
Bon courage pour la suite
Nicolas GRANIER
Dernière modification par Nicolas Granier (Thu 13 November 2014 11:16)
Hors ligne
#12 Tue 18 November 2014 12:49
- Sprumont F
- Juste Inscrit !
- Date d'inscription: 1 Dec 2009
- Messages: 8
Re: [ARCGIS 10] ModelBuilder : itération sur fichier txt
pour ceux que ca intéressent, voici la solution en utilisant le model Builder.
Une des astuces: ne pas utiliser "files iterator" mais plutot "table iterator" et faire attention avec les noms de fichier (voir image).
Cette solution avec model builder est relativement simple et permet de se passer de la console Python.
Hors ligne