J'écris un script générique qui implique d'écrire des fichiers de formes dans un répertoire qui sont ensuite fusionnés. Après avoir écrit les fichiers dans le dossier de sortie , j'essaie d'obtenir l' algorithme saga: mergeshapeslayers pour fusionner tous les fichiers du dossier de sortie . J'ai utilisé le Model Builder et bien qu'il soit utile dans une certaine mesure, je trouve qu'il est utilisé à des fins spécifiques alors que j'essaie de créer un script à des fins génériques.
Code:
##Test=name
##Select_folder=folder
##Result=output vector
import os
import glob
path_1 = Select_folder
path = path_1
os.chdir(path)
def function():
output = glob.glob(path_1 + './*.shp')
x = 0
while output[x]:
for fname in glob.glob("*.shp"):
outputs_1 = processing.runandload("qgis:fieldcalculator", output[x], 'Number', 1, 10, 0, True, 1 , "C:\Users\Me\Desktop\Output\\" + fname)
multiple_0 = glob.glob("*.shp")
x = x + 1
if x + 1 > len(output):
processing.runalg("saga:mergeshapeslayers", output[0], ";".join(multiple_0) , Result)
break
else:
continue
if path_1:
function()
else:
pass
pyqgis
qgis-processing
Joseph
la source
la source
Z
?. À quoi sert lefunction(Z)
service s'il ne renvoie rien? Quelle est la difference entreglob.glob(Z + './*.shp')
etglob.glob("*.shp")
?glob.glob(path_1 + './*.shp')
définit où se trouvent les fichiers .shp; etglob.glob("*.shp")
récupère les noms de fichiers des fichiers .shp. Veuillez me corriger si je me trompe.Réponses:
Vous pouvez simplifier votre script sans utiliser
while...
etx
,x+1
: pour Python liste simple, il serait préférable d'utiliserfor
ou liste compréhensions :Quelques explications:
ou mieux avec
os.path.join
(universel, Windows, Linux, Mac OS X):la source
##Result=output vector
?J'ai trouvé la réponse grâce à @gene qui les commentaires m'ont aidé à me concentrer sur le bon domaine. Il suffit de simplement utiliser glob pour la fonction saga: mergeshapeslayers pour appeler:
Ajouté ceci au code ci-dessus qui fusionne maintenant tous les fichiers du dossier.
la source