Estou escrevendo um script genérico que envolve a gravação de shapefiles em um diretório que são mesclados. Depois de gravar os arquivos na pasta Saída , estou tentando obter o algoritmo saga: mergeshapeslayers para mesclar todos os arquivos na pasta Saída . Eu usei o Model Builder e, embora seja útil até certo ponto, acho que ele é usado para fins específicos, enquanto estou tentando criar um script para fins 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
Joseph
fonte
fonte
Z
? O que ofunction(Z)
serviço serve se não retornar nada? Qual é a diferença entreglob.glob(Z + './*.shp')
eglob.glob("*.shp")
?glob.glob(path_1 + './*.shp')
define onde estão os arquivos .shp; eglob.glob("*.shp")
busca os nomes dos arquivos .shp. Por favor, corrija-me se eu estiver enganado.Respostas:
Você pode simplificar o seu script sem usar
while...
ex
,x+1
: a simples lista Python, seria melhor usarfor
ou compreensões lista :Algumas explicações:
ou melhor com
os.path.join
(universal, Windows, Linux, Mac OS X):fonte
##Result=output vector
?Encontrei a resposta graças aos comentários de @gene, que me ajudaram a focar na área certa. Bastava simplesmente usar glob para a função saga: mergeshapeslayers para chamar:
Adicionado isso ao código acima, que agora mescla todos os arquivos na pasta.
fonte