如何使用数据更新游标根据另一个字段的值更新记录?

0 投票
1 回答
2442 浏览
提问于 2025-04-18 09:58

我正在尝试将文件名和路径写入一个特征类中的两个不同字段,而每条记录的值是根据在一个列表中找到的匹配项来决定的。当我运行我的代码时,它对每条记录写入的值都是一样的,所以肯定出错了。我觉得它只找到第一个匹配项,然后一直写这个值,但我希望它能查看我设置的搜索光标中的字段值,然后在列表中找到匹配项,并将其写入这两个字段。我遗漏了什么呢?

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)

撰写回答