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 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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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

 

Pied de page des forums

Powered by FluxBB