Vairāk

Iteratori modeļu veidotājā - ligzdotu failu apvienošana ar vienādiem faila nosaukuma galiem


Es mēģinu apvienot failus, kas ir ievietoti dažādās mapēs pēc to nosaukumu. Piemēram, 1. mapē ir līdz 100 apakšmapēm, kurās katrā ir figūras failu kopa: apakšmape1_A.shp, apakšmape1_B.shp, apakšmape1_C.shp utt.

Es vēlos apvienot formas failus no katras apakšmapes ar vienādu faila nosaukuma galotni (piemēram, sapludināt apakšmapi1_A, apakšmapi2_A, apakšmapi3_A,…, apakšmapi100_A), tāpēc gala izvade ir apvienotu formas failu sērija ar tādu pašu faila nosaukuma galotni (A, B, C utt.). Piemēram, A_merged.shp, B_merged.shp, C_merged.shp utt.

Es neesmu pazīstams ar python, un labprātāk to darītu, izmantojot modeļu veidotāju. Esmu mēģinājis izmantot atkārtotu funkciju klasi un sapludināšanas rīkus, bet neesmu pārliecināts, kā padarīt šo darbu tādu, kādu vēlos. Iespējams, kaut kā izmantot iekļauto aizstāšanu vai iteratora aizstājējzīmi?

Ir kāda ideja, ko man darīt?


Veiciet OS staigā, lai atkārtotu visas mapes un apakšmapes. Katrai mapei uzskaitiet visu funkciju klasi. Sadaliet funkciju klases nosaukumu pasvītrojuma un sastādīt sarakstu, tad apstrādājiet šo sarakstu tā, lai nosaukumi būtu unikāls. Izmantojiet šos unikālos nosaukumus kā wild card kamēr atkārtota reģistrēšanās visas funkciju klases vienā mapē. Visbeidzot palaidiet to cauri sapludināšanas rīks. Es pievienoju zemāk esošo py rīku kopas skripta rīkam, un tas darbojas labi vienai, piemēram, ģeometrijai.

importēt arcpy importēt os importēt matemātiku importēt sys FolderOrWorkspace = arcpy.GetParameterAsText (0) arcpy.AddMessage ("======= START") dirname, dirnames, filenames in os.walk (FolderOrWorkspace): #Iterate through folder for apakšdirname dirnames: arcpy.env.workspace = os.path.join (dirname, subdirname) # Darbvieta ir iestatīta uz mapi UList = [] arcpy.AddMessage ("") arcpy.AddMessage (" - mape:"+ apakšdirname) FeatureClassList = arcpy.ListFeatureClasses () arcpy.AddMessage (" - FEATURE CLASS LIST:") arcpy.AddMessage ("") arcpy.AddMessage (FeatureClassList) arcpy.AddMessage ("") īsam nosaukumam FeatureClassList: # Izveidojiet visu funkciju sarakstu vārdi aiz pirmā "_" Uzvārds = ShortName.split ("_") [1] UList.append (LastName) arcpy.AddMessage (" - Īsā vārdu saraksts:"+ str (UList)) UniqueShortName = set (UList) # Apstrādājiet sarakstu, lai tas būtu tikai unikāli īsie vārdi arcpy.AddMessage (" - Unikāls īso vārdu saraksts:"+ str (UniqueShortName)), lai iegūtu vislielāko UList: # izveidojiet funkciju klašu sarakstu, kas beidzas ar s hort name NameWildCard = ("*_"+ mergetest) MergeFeatureClassList = arcpy.ListFeatureClasses (NameWildCard, ", FeatureClassList) MFCLCount = len (MergeFeatureClassList) arcpy.AddMessage (" - Unikālais īso vārdu skaits: "+) str (MFCLC) <= 1: arcpy.AddMessage (" - Tikai 1 funkciju klase: nav sapludināts") else: MergeName = ("Apvienots" + mergetest) # sapludināšanas formas faila nosaukums try: arcpy.AddMessage (" - Apvienošana:" + str (MergeFeatureClassList)) arcpy.AddMessage ("") arcpy.Merge_management (MergeFeatureClassList, MergeName, "") # Saglabā tajā pašā mapē # NB Sapludināšana ir uzlabots rīks, izņemot izņēmumu kā e: arcpy.AddError (""+e. ziņojums) arcpy.AddMessage ("======= END")

Iespējams, vēlēsities pievienot ģeoma tipa pārbaudi…

Ekrāna satveršana: formas faili

Skripta rīki: Skripta rīku pievienošana