arcpy/python:liste von Karten zusammenführen (Tool: Merge)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MarcNAV
User
Beiträge: 52
Registriert: Freitag 16. Mai 2014, 11:39

Habe diesen Code geschrieben und folgendes Problem. Ich möchte eien Liste von .shp Dateien (14 Stk.) zu einer .shp zusammenfügen (mergen). Leider überschreibt er für jede .shp die 'ca' enthält die Output File. Hat einer eine Ahnung wie ich es schaffe, dass er mir nur einmal die Liste einliest und daraus eine .shp erzeugt? Da es viele Daten sind habe ich keine Lust das von Hand zu machen. Danke schon mal

Code: Alles auswählen

import arcpy, os, glob
from arcpy import env
from arcpy.sa import *
arcpy.CheckOutExtension("spatial")


def main():


    arcpy.env.workspace = 'S:/Test/shapefiles'
    workspace = arcpy.env.workspace
    destination = 'S:/Test/merged'
    shplist = glob.glob(workspace + '/*.shp')
    for shp in shplist:
        
        shpname = os.path.basename(shp[:-len('.shp')])
        if '_s_' not in shpname:

            if 'ca' in shpname:

                shapelist = []
                shapelist.append(shp)

                output = destination + '/calcium.shp'
            	arcpy.Merge_management(shapelist, output)

if __name__ == '__main__':
    main()

BlackJack

@MarcNAV: Du möchtest nicht das ``arcpy.Merge_management(shapelist, output)`` in jedem Schleifendurchlauf wenn die ``if``-Bedingung erfüllt ist ausgeführt wird, dann schreib das halt nicht in der Schleife und in den ``if``-Zweig. Vielleicht würde es ja mehr Sinn machen die Leere Liste vor der Schleife zu erstellen, die in der Schleife dann mit Werten zu füllen, und dann nach der Schleife das Mergen zu machen. Das ist irgendwie ganz ganz ganz grundlegende Logik.
MarcNAV
User
Beiträge: 52
Registriert: Freitag 16. Mai 2014, 11:39

Danke BlackJack. Läuft jetzt;) mußte auch noch nach der Schleife delete.shapelist[:] einfügen da ich danach noch nach anderen strings gesucht habe.
BlackJack

@MarcNAV: Das würde ich nicht machen. Statt den Inhalt der Liste zu löschen würde ich einfach eine neue erstellen. Und zwar kurz bevor man die benötigt, dann muss man da nur an *einer* Stelle im Programm etwas machen und man muss sich keine Gedanken mehr machen ob anderer Code die Liste übergeben bekommt und da irgendwo noch eine Referenz existiert und man durch das leeren dieser Liste an anderer Stelle Probleme verursacht.
Antworten