#1 Thu 04 January 2018 10:00
- papeyeku
- Participant occasionnel
- Date d'inscription: 8 Apr 2011
- Messages: 13
QGIS 2.99: Scripts Python
Bonjour,
Je n'arrive pas à lancer un algorithme tout simple sur QGIS 2.99
En fait ça bloque dès le début, lorsque je veux charger un nom de répertoire.
Code:
##infolder=folder /tmp/ import os def listFolder(folder,ext): #lister les fichier txt d'un dossier out=[] for e in os.listdir(folder): if e.endswith(ext): out.append(os.path.realpath(folder)+'/'+e) return out listFolder(inFolder,'.txt')
J'obtient l'erreur suivante :
Code:
Paramètres en entrée: { 'infolder' : 'C:/Users/Admin/Desktop/dossier_test' } Traceback (most recent call last): File "C:/PROGRA~1/QGIS2~1.99/apps/qgis-dev/./python/plugins\processing\script\ScriptAlgorithm.py", line 261, in processAlgorithm exec((self.cleaned_script), self.ns) File "", line 87, in IndexError: list index out of range Execution failed after 0.01 seconds
Y'a t'il une erreur dans mon code ou alors c'est quelque chose qui n'est pas encore implémenté dans Qgis 2.99 ?
Je suis sous windows et utilise QGIS "weekly" 2.99.0-1
Merci d'avance
Dernière modification par papeyeku (Thu 04 January 2018 10:04)
Hors ligne
#2 Thu 04 January 2018 16:28
Re: QGIS 2.99: Scripts Python
Bonjour,
Je vois trois choses dans ton script :
- le plus embêtant est que infolder est écrit un coup avec un f minuscule et un coup avec F majuscule
- tu ne définis pas le type de sortie. Remarque, ce n'est pas obligé si tu ne souhaites pas intégrer ton module dans le modeleur pour un chaînage d'opérations ou si tu n'as pas besoin d'une trace : fichier csv, etc...Sache que si tu ne le définis pas, le résultat s'affichera quand même dans la console python. Si tu peux te contenter de la console, alors il suffit d'inclure un print dans ton code
- ensuite, tu définis un chemin optionnel /tmp/ alors que ton log semble indiquer que tu es sous windows. Par ailleurs, je n'ai pas réussi à intégrer un chemin optionnel sans générer de message d'erreur (sous la 2.18). Je serais curieux de savoir comment on spécifie un chemin optionnel..
Peut-être ce script remanié te donnera-t-il satisfaction ? Là, il recherche les fichiers avec extension .shp et ton script sera rangé dans un groupe appelé Dossiers une fois que tu l'enregistreras
Code:
##Dossiers=group ##inFolder=folder import os def listFolder(folder,ext): #lister les fichier shp d'un dossier out=[] for e in os.listdir(folder): if e.endswith(ext): out.append(os.path.realpath(folder)+'/'+e) print out listFolder(inFolder,'.shp')
geodata au cerema et petits billets en géomatique
Hors ligne
#3 Thu 04 January 2018 17:14
- papeyeku
- Participant occasionnel
- Date d'inscription: 8 Apr 2011
- Messages: 13
Re: QGIS 2.99: Scripts Python
Bonjour Mathieu,
Merci pour ta réponse. Initialement le script était plus long et générait en fichier csv en parsant plusieurs fichiers textes. Celui fonctionnait bien sous QGIS 2.99 et les fichiers en entrée était selectionné par l'utilisateur grâce à PyQT
(input=QFileDialog.getOpenFileNames(None, "Selectionner les fichiers")[0]).
Problème : le script ne fonctionnait donc pas dans le modeleur (logique).
Le "/tmp/" ne sert à rien en l'état (vu sur un autre script), mais si je ne met rien un message d'erreur avant même de pouvoir choisir les paramètre. (désolé d'avoir oublié de l'indiqué)
Code:
TypeError: setText(self, str): argument 1 has unexpected type 'QVariant'
C'est également ce message d'erreur que j’obtiens avec ton script :-/.
Hors ligne
#4 Tue 09 January 2018 11:11
Re: QGIS 2.99: Scripts Python
Bonjour papyeku
En effet, sans valeur optionnelle, il y a une erreur sous la 2.99
Sous la 2.99, dans l'écriture du code, il est exigé des parenthèses après un print. Il y a plus d'exigences, sans doute liées à python3
Sous la 2.99, ce code fonctionne chez moi :
Code:
##Dossiers=group ##inFolder=folder C:/temp/ import os def listFolder(folder,ext): #lister les fichier shp d'un dossier out=[] for e in os.listdir(folder): if e.endswith(ext): out.append(os.path.realpath(folder)+'/'+e) print('\n'.join(out)) listFolder(inFolder,'.shp')
geodata au cerema et petits billets en géomatique
Hors ligne