Конкатенация строк таблицы в ArcMap 10.5

Иногда бывает необходимо сгруппировать и объединить значения поля по некому атрибуту из другого поля. В ArcMap подобный функционал не реализован, и для решения поставленной задачи можно написать свой небольшой код. 

В принципе, такие модули есть, но с кириллицей они работают плохо, да и без нее тоже не всегда. Поэтому напишем свой код. 

По функционалу он не отличается от того, что уже есть, но зато работает.


# -*- ################
# --------------------
import arcpy
from arcpy import da, env

env.overwriteOutput = True

table = arcpy.GetParameterAsText(0)  # input table
field1 = arcpy.GetParameterAsText(1) # Case field
field2 = arcpy.GetParameterAsText(2) # Concatenate field
field3 = arcpy.GetParameterAsText(3) # Result field
delimeter = arcpy.GetParameterAsText(4) # Result field

def unique_values(tab, field): # creates list of unique values in case field
with arcpy.da.SearchCursor(tab, [field]) as cursor:
return sorted({row[0] for row in cursor})

def update(tab, casefield, confield, x, i): # writes list in result field
with arcpy.da.UpdateCursor(tab, [casefield, confield]) as concursor:
for rows in concursor:
if rows[0] == i:
rows[1] = delimeter.join(y for y in list(set(x)))
concursor.updateRow(rows)
del rows
del concursor
arcpy.AddMessage(str(i) + " field concatenate")

def concan(tab, casefield, sumfield, confield): # creates list of values in concatenate field
for i in unique_values(tab, casefield):
with arcpy.da.SearchCursor(tab, [casefield, sumfield, confield]) as cursor1:
x = []
for row in cursor1:
if row[0] == i:
x.append(row[1])
arcpy.AddMessage(str(i) + " field collect")
update(tab, casefield, confield, x, i)
del row
del cursor1
concan(table, field1, field2, field3)


Комментарии