Más

¿Seleccionando todos los archivos en el directorio para fusionarlos en QGIS Processing?


Estoy escribiendo un script genérico que implica escribir shapefiles en un directorio que luego se fusionan. Después de escribir los archivos en el Producción carpeta, estoy tratando de obtener el saga: mergeshapeslayers algoritmo para fusionar todos los archivos en el Producción carpeta. He usado Model Builder y, aunque es útil hasta cierto punto, encuentro que se usa para propósitos específicos mientras que intento hacer un script para propósitos genéricos.

Código:

## Prueba = nombre ## Seleccionar_carpeta = carpeta ## Resultado = vector de salida importar os import glob ruta_1 = Seleccionar_carpeta ruta = ruta_1 os.chdir (ruta) def función (): salida = glob.glob (ruta_1 + './*. shp ') x = 0 while output [x]: para fname en glob.glob ("*. shp"): outputs_1 = processing.runandload ("qgis: fieldcalculator", output [x],' Number ', 1, 10 , 0, Verdadero, 1, "C:  Users  Me  Desktop  Output " + fname) multiple_0 = glob.glob ("*. Shp") x = x + 1 si x + 1> len (salida) : processing.runalg ("saga: mergeshapeslayers", salida [0], ";". join (multiple_0), Result) break else: continue if path_1: function () else: pass

Puede simplificar su secuencia de comandos sin usartiempo…yX,x + 1: para una lista simple de Python, sería mejor usarporo enumere las comprensiones:

## Prueba = nombre ## Select_folder = carpeta ## Result = vector de salida import os import glob # ruta de la carpeta de Result shapefile path_res = os.path.dirname (Result) # ir a Select_folder os.chdir (Select_folder) # copiar los shapefiles (no necesita cargar los shapefiles, así que use runalg) para fname en glob.glob ("*. shp"): outputs_1 = processing.runalg ("qgis: fieldcalculator", fname, 'Number', 1, 10 , 0, True, 1, path_res + "/" + fname) # rutas de los shapefiles en la carpeta de resultados con la salida de comprensión de la lista = [path_res + "/" + shp para shp en glob.glob ("*. Shp") ] # fusionar el shapefiles processing.runalg ("saga: mergeshapeslayers", salida [0], ";". join (salida), Resultado)

Algunas explicaciones:

# ruta de la carpeta del archivo shape de resultados # = ruta_res print os.path.dirname ("/ Users / Shared / test.shp") / Users / Shared # list comprension print [shp para shp en glob.glob ("*. shp" )] ['shape1.shp', 'shape2.shp',…, 'shapen.shp'] print [path_res + "/" + shp para shp en glob.glob ("*. shp")] ['/ Usuarios /Shared/shape1.shp ',' /Users/Shared/shape2.shp',…, '/ Users / Shared / shapen.shp']

o mejor conos.path.join(universal, Windows, Linux, Mac OS X):

print [os.path.join (path_res, shp) for shp in glob.glob ("*. shp")] print [os.path.join (path_res, shp) for shp in glob.glob ("*. shp" )] [0] # = salida [0] /Users/Shared/shape1.shp

Encontré la respuesta gracias a @gene, cuyos comentarios me ayudaron a concentrarme en el área correcta. Simplemente tenía que usar glob para el saga: mergeshapeslayers función para llamar:

multiple_0 = glob.glob ("*. shp")

Se agregó esto al código anterior que ahora fusiona todos los archivos en la carpeta.


Ver el vídeo: Qgis Merge Rasters (Septiembre 2021).