Saya sedang menulis skrip generik yang melibatkan penulisan shapefile ke direktori yang kemudian digabung bersama. Setelah menulis file ke folder Output , saya mencoba untuk mendapatkan saga: algoritma mergeshapeslayers untuk menggabungkan semua file di folder Output . Saya telah menggunakan Pembuat Model dan meskipun ini sangat membantu, saya menemukan bahwa itu digunakan untuk tujuan tertentu sedangkan saya mencoba membuat skrip untuk tujuan umum.
Kode:
##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
Yusuf
sumber
sumber
Z
? Apa yangfunction(Z)
dilayani jika tidak mengembalikan apa pun? Apa perbedaan antaraglob.glob(Z + './*.shp')
danglob.glob("*.shp")
?glob.glob(path_1 + './*.shp')
menentukan di mana file .shp berada; danglob.glob("*.shp")
mengambil nama file file .shp. Harap perbaiki saya jika saya salah.Jawaban:
Anda dapat menyederhanakan script tanpa menggunakan
while...
danx
,x+1
: untuk sederhana daftar Python, itu akan lebih baik untuk menggunakanfor
atau daftar comprehensions :Beberapa penjelasan:
atau lebih baik dengan
os.path.join
(universal, Windows, Linux, Mac OS X):sumber
##Result=output vector
?Menemukan jawabannya berkat @gene yang komentarnya membantu saya fokus pada area yang tepat. Hanya harus menggunakan glob untuk saga: fungsi mergeshapeslayers memanggil:
Menambahkan ini ke kode di atas yang sekarang menggabungkan semua file di folder.
sumber