如何使用数据更新游标根据另一个字段的值更新记录?
我正在尝试将文件名和路径写入一个特征类中的两个不同字段,而每条记录的值是根据在一个列表中找到的匹配项来决定的。当我运行我的代码时,它对每条记录写入的值都是一样的,所以肯定出错了。我觉得它只找到第一个匹配项,然后一直写这个值,但我希望它能查看我设置的搜索光标中的字段值,然后在列表中找到匹配项,并将其写入这两个字段。我遗漏了什么呢?
import arcpy, os
photos_path = r'P:\Records\GIS\Projects\D04_OHS\OverheadSignStructurePics'
OHS_FC = r'D:\Records\GIS\Projects\D04_OHS\D04_OHS.gdb\D04_OHS'
ID_fld = 'OSMI_ID'
file_nm_fld = 'LINK_FILENAME'
path_fld ='LINK_PATH'
photos_list = []
for dirpath, dirnames, filenames in os.walk(photos_path):
for filename in filenames:
fullPath = dirpath+'\\'+filename
if fullPath not in photos_list:
photos_list.append(fullPath)
arcpy.AddField_management(OHS_FC,file_nm_fld,'TEXT',100)
arcpy.AddField_management(OHS_FC,path_fld,'TEXT',300)
srch_cursor = arcpy.da.SearchCursor(OHS_FC,ID_fld)
updt_cursor_fn = arcpy.da.UpdateCursor(OHS_FC,file_nm_fld)
updt_cursor_fp = arcpy.da.UpdateCursor(OHS_FC,path_fld)
for row in srch_cursor:
val = str(row[0])
for p in photos_list:
f_name, f_path = os.path.split(p)
if val in p:
#print val
for u_row1 in updt_cursor_fn:
u_row1[0] = f_name
updt_cursor_fn.updateRow(u_row1)
for u_row2 in updt_cursor_fp:
u_row2[0] = f_path
updt_cursor_fp.updateRow(u_row2)
1 个回答
0
你不需要使用搜索游标或者单独的更新游标。只需使用一个更新游标,就可以用它来查找匹配的内容并更新字段。确保把你需要的所有字段都添加到这个更新游标中。
fields = (ID_fld,file_nm_fld,path_fld)
updt_cursor = arcpy.da.UpdateCursor(OHS_FC, fields)
for row in updt_cursor:
val = str(row[0])
for p in photos_list:
f_name, f_path = os.path.split(p)
if val in p:
#print val
row[1] = f_name
row[2] = f_path
updt_cursor.updateRow(row)