Viac

Iterátory v nástroji na tvorbu modelov - spájanie vnorených súborov s rovnakým koncovým názvom


Pokúšam sa zlúčiť súbory, ktoré sú vnorené do rôznych priečinkov podľa názvov súborov. Priečinok 1 napríklad obsahuje až 100 podpriečinkov, z ktorých každý obsahuje množinu tvarových súborov: podpriečinok1_A.shp, podpriečinok1_B.shp, podpriečinok1_C.shp atď.

Chcem zlúčiť shapefiles z každej podpriečinka s rovnakým koncovým názvom súboru (napr. Zlúčiť subfolder1_A, subfolder2_A, subfolder3_A, ..., subfolder100_A), takže konečným výstupom je séria zlúčených tvarových súborov s rovnakým koncovým názvom súboru (A, B, C , atď.). Napríklad napríklad A_merged.shp, B_merged.shp, C_merged.shp atď.

Nie som oboznámený s pythonom a radšej by som to urobil pomocou nástroja na tvorbu modelov. Skúsil som použiť iteráciu funkcií a nástroje na zlúčenie, ale nie som si istý, ako to zabezpečiť, aby to fungovalo tak, ako chcem. Je možné nejakým spôsobom použiť vloženú substitúciu alebo zástupný znak iterátora?

Máte predstavu, čo by som mal urobiť?


Urob Operácia OS prejde na iteráciu všetkých priečinkov a podpriečinkov. Pre každý priečinok uveďte všetky triedy funkcií. Rozdeľte názov triedy funkcií podčiarkovníkom a zostaviť zoznam, potom spracujte tento zoznam tak, aby boli názvy jedinečný. Tieto jedinečné názvy používajte ako a divoká karta kým oddýchnutie všetky triedy funkcií v rovnakom priečinku. Nakoniec ho spustite cez nástroj na zlúčenie. Pripojil som nižšie uvedený py do nástroja skriptu v súprave nástrojov a funguje to dobre pre jedinú geometriu.

import arcpy import os import math import sys FolderOrWorkspace = arcpy.GetParameterAsText (0) arcpy.AddMessage ("======= START") pre dirname, dirnames, namesname in os.walk (FolderOrWorkspace): #Iterate through folder for podadresár v adresároch: arcpy.env.workspace = os.path.join (názov_adresy, podadresár) # Pracovný priestor je nastavený na priečinok UList = [] arcpy.AddMessage ("") arcpy.AddMessage (" - priečinok:"+ podadresár) FeatureClassList = arcpy.ListFeatureClasses () arcpy.AddMessage (" - ZOZNAM Triedy vlastností:") arcpy.AddMessage ("") arcpy.AddMessage (FeatureClassList) arcpy.AddMessage ("") pre ShortName v FeatureClassList: # Vytvorte zoznam všetkých názvy za prvým „_“ Priezvisko = ShortName.split („_“) [1] UList.append (Priezvisko) arcpy.AddMessage (" - Krátky zoznam mien:"+ str (UList)) UniqueShortName = sada (UList) # Spracujte zoznam tak, aby bol jedinečný iba krátkymi názvami arcpy.AddMessage (" - jedinečný zoznam krátkych názvov:"+ str (UniqueShortName)) pre mergetest v UList: # vytvorte zoznam tried funkcií končiacich s názov horty NameWildCard = ("*_"+ mergetest) MergeFeatureClassList = arcpy.ListFeatureClasses (NameWildCard, ", FeatureClassList) MFCLCount = len (MergeFeatureClassList) arcpy.AddMessage (" - jedinečný počet krátkych mien: "+ str (MFCLCount) <= 1: arcpy.AddMessage (" - iba 1 trieda funkcií: nezlúčené") else: MergeName = ("zlúčené" + mergetest) # názov súboru zlúčenia tvarového súboru skúste: arcpy.AddMessage (" - zlúčenie:" + str (MergeFeatureClassList)) arcpy.AddMessage ("") arcpy.Merge_management (MergeFeatureClassList, MergeName, "") # Uloží ho do rovnakého priečinka # NB Zlúčenie je pokročilý nástroj okrem výnimky ako e: arcpy.AddError (""+e. správa) arcpy.AddMessage ("======= END")

Možno budete chcieť pridať kontrolu typu geom…

Grab na obrazovke: Shapefiles

Skriptové nástroje: Pridanie nástrojov skriptu


Pozri si video: Originálna Průša i3 MK2 3D tlačiareň po 1 roku používania (Október 2021).