Estoy escribiendo un script genérico que implica escribir archivos de forma en un directorio que luego se fusionan. Después de escribir los archivos en la carpeta de Salida , estoy tratando de obtener el algoritmo saga: mergeshapeslayers para fusionar todos los archivos en la carpeta de Salida . He utilizado el Model Builder y, aunque es útil hasta cierto punto, creo que se utiliza para fines específicos, mientras que estoy intentando crear un script con fines genéricos.
Código:
##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
José
fuente
fuente
Z
? ¿Qué sirve elfunction(Z)
servicio si no devuelve nada? ¿Cuál es la diferencia entreglob.glob(Z + './*.shp')
yglob.glob("*.shp")
?glob.glob(path_1 + './*.shp')
define dónde están los archivos .shp; yglob.glob("*.shp")
busca los nombres de archivo de los archivos .shp. Por favor corrígeme si me equivoco.Respuestas:
Puede simplificar su secuencia de comandos sin usar
while...
yx
,x+1
para una lista simple de Python, sería mejor usarfor
o enumerar las comprensiones :Algunas explicaciones:
o mejor con
os.path.join
(universal, Windows, Linux, Mac OS X):fuente
##Result=output vector
?Encontré la respuesta gracias a @gene, cuyos comentarios me ayudaron a centrarme en el área correcta. Simplemente tenía que usar glob para la saga: la función mergeshapeslayers para llamar:
Se agregó esto al código anterior que ahora combina todos los archivos en la carpeta.
fuente