如何使用da update cursor根据另一个字段中的值更新记录值?

2024-06-16 11:54:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将文件名和路径写入要素类中的两个独立字段,并且每个记录的值取决于在列表中查找匹配项。当我运行我的代码时,它为每个记录写入相同的值,所以出了问题。我认为它完成了第一个匹配,并一遍又一遍地写这个值,但是我希望它查看我的搜索光标设置的字段中的值,然后在列表中找到匹配项并将其写入两个字段。我错过了什么?在

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)

Tags: pathinidforoscursorlistfile
1条回答
网友
1楼 · 发布于 2024-06-16 11:54:58

您不需要搜索光标或单独的更新光标。只需使用一个更新游标并使用它来查找匹配项并更新字段。确保将需要的所有字段添加到更新光标中。在

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)

相关问题 更多 >