มากกว่า

การเลือกไฟล์ทั้งหมดในไดเร็กทอรีเพื่อรวมในการประมวลผล QGIS?

การเลือกไฟล์ทั้งหมดในไดเร็กทอรีเพื่อรวมในการประมวลผล QGIS?


ฉันกำลังเขียนสคริปต์ทั่วไปที่เกี่ยวข้องกับการเขียนรูปร่างไฟล์ไปยังไดเร็กทอรีที่รวมเข้าด้วยกันแล้ว หลังจากเขียนไฟล์ไปยัง เอาท์พุต โฟลเดอร์ ฉันกำลังพยายามรับ saga:mergeshapeslayers อัลกอริธึมเพื่อรวมไฟล์ทั้งหมดใน เอาท์พุต โฟลเดอร์ ฉันได้ใช้ Model Builder และแม้ว่าจะมีประโยชน์ในระดับหนึ่ง แต่ฉันพบว่ามันถูกใช้เพื่อวัตถุประสงค์เฉพาะในขณะที่ฉันกำลังพยายามสร้างสคริปต์เพื่อวัตถุประสงค์ทั่วไป

รหัส:

##Test=name ##Select_folder=folder ##Result=output vector import os นำเข้า glob path_1 = Select_folder path = path_1 os.chdir(path) def function(): output = glob.glob(path_1 + './*. shp') x = 0 ในขณะที่ output[x]: สำหรับ fname ใน glob.glob("*.shp"): outputs_1 = processing.runandload("qgis:fieldcalculator", output[x], 'Number', 1, 10 , 0, จริง, 1 , "C:UsersMeDesktopOutput" + fname) multiple_0 = glob.glob("*.shp") x = x + 1 if x + 1 > len(output) : กำลังดำเนินการ

คุณสามารถทำให้สคริปต์ของคุณง่ายขึ้นโดยไม่ต้องใช้ในขณะที่…และNS,x+1: สำหรับรายการ Python อย่างง่าย จะเป็นการดีที่สุดที่จะใช้สำหรับหรือรายการความเข้าใจ:

##Test=name ##Select_folder=folder ##Result=output vector import os import glob # เส้นทางโฟลเดอร์ของผลลัพธ์ shapefile path_res = os.path.dirname (ผลลัพธ์) # ไปที่ Select_folder os.chdir (Select_folder) # คัดลอกไฟล์รูปร่าง (คุณไม่จำเป็นต้องโหลดไฟล์รูปร่าง ดังนั้นให้ใช้ runalg) สำหรับ fname ใน glob.glob("*.shp"): outputs_1 = processing.runalg("qgis:fieldcalculator", fname, 'Number', 1, 10 , 0, จริง, 1 , path_res + "/"+ fname) # path ของไฟล์รูปร่างในโฟลเดอร์ Result พร้อม list comprehension output = [path_res + "/"+ shp for shp in glob.glob("*.shp") ] # ผสาน shapefiles processing.runalg("saga:mergeshapeslayers", output[0], ";".join(output) , ผลลัพธ์)

คำอธิบายบางอย่าง:

# เส้นทางโฟลเดอร์ของผลลัพธ์รูปร่างไฟล์ # = path_res พิมพ์ os.path.dirname("/Users/Shared/test.shp") /Users/Shared # รายการพิมพ์ความเข้าใจ [shp สำหรับ shp ใน glob.glob("*.shp" )] ['shape1.shp', 'shape2.shp',… , 'shapen.shp'] พิมพ์ [path_res + "/"+ shp สำหรับ shp ใน glob.glob("*.shp")] ['/Users /Shared/shape1.shp', '/Users/Shared/shape2.shp',… ,'/Users/Shared/shapen.shp']

หรือดีกว่าด้วยos.path.join(สากล, Windows, Linux, Mac OS X):

พิมพ์ [os.path.join(path_res, shp) สำหรับ shp ใน glob.glob("*.shp")] พิมพ์ [os.path.join(path_res, shp) สำหรับ shp ใน glob.glob("*.shp" )][0] # = เอาต์พุต[0] /Users/Shared/shape1.shp

พบคำตอบด้วยความคิดเห็นของ @gene ที่ช่วยให้ฉันจดจ่อกับสิ่งที่ถูกต้อง เพียงแค่ต้องใช้ glob สำหรับ saga:mergeshapeslayers ฟังก์ชั่นการโทร:

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

เพิ่มสิ่งนี้ในโค้ดด้านบนซึ่งตอนนี้รวมไฟล์ทั้งหมดในโฟลเดอร์


ดูวิดีโอ: QGIS ตดตงปลกอนสวนขยายเพมเตมขยายภาพแผนทกเกลแมป Google Map งานแผนทภาษ 8