如何更新属性表从一个.csv和添加新行应用几何

262
2
跳到解决方案
一个月前
jgstaley
通过
新贡献者II

你好,

我有一个特征类,它有许多带有属性信息的多边形。我还有一个.csv文件,其中包含与属性表相同的信息,但每月更新一次。

我想做两件事:我想更新属性表的值,以反映.csv中发生的任何更改(IE:将“状态”字段从“活动”更改为“过期”)。我想我可以使用arcpy的更新光标(我只有和esri提供的“创建Python脚本”课程一样多的经验)。

其次,我想添加.csv文件中但不在属性表中的任何新行,以便为它们绘制几何图形。我想我需要一个插入光标这?

谢谢!

谢谢!

0荣誉
1解决方案

接受的解决方案
JohannesLindner
常规赛MVP

#输入参数fc = r"N:\…\db。gdb\TestPoints" #路径到fc csv = r"N:\…\TestPoints .csv" #路径到csv copy_fields = ["TextField", "IntegerField", "DoubleField"] #你想复制的字段列表。第一个字段必须是唯一的标识符import arcpy#读取csv,将其数据存储在一个字典csv_dict = {row[0]: row for row in arcpy.da。使用UpdateCursor和arcpy.da在特性上进行循环。UpdateCursor(fc, copy_fields)作为游标:在游标中的行:#获取行的csv数据key = row[0] try: new_row = csv_dict[key] except KeyError: # row not found in csv print(f"Entry not found in csv: {copy_fields[0]} = {key}") # cursor. deleterow () # uncomment this to delete the feature continue # update the feature cursor. updaterow (new_row) del csv_dict[key] #在csv_dict中留下的每个特征都是新的arcpy.da。InsertCursor(fc, copy_fields)作为游标:用于csv_dict.values()中的new_row


祝你有愉快的一天!
约翰内斯

在原帖子中查看解决方案

0荣誉
2回答
JohannesLindner
常规赛MVP

#输入参数fc = r"N:\…\db。gdb\TestPoints" #路径到fc csv = r"N:\…\TestPoints .csv" #路径到csv copy_fields = ["TextField", "IntegerField", "DoubleField"] #你想复制的字段列表。第一个字段必须是唯一的标识符import arcpy#读取csv,将其数据存储在一个字典csv_dict = {row[0]: row for row in arcpy.da。使用UpdateCursor和arcpy.da在特性上进行循环。UpdateCursor(fc, copy_fields)作为游标:在游标中的行:#获取行的csv数据key = row[0] try: new_row = csv_dict[key] except KeyError: # row not found in csv print(f"Entry not found in csv: {copy_fields[0]} = {key}") # cursor. deleterow () # uncomment this to delete the feature continue # update the feature cursor. updaterow (new_row) del csv_dict[key] #在csv_dict中留下的每个特征都是新的arcpy.da。InsertCursor(fc, copy_fields)作为游标:用于csv_dict.values()中的new_row


祝你有愉快的一天!
约翰内斯
0荣誉
jgstaley
通过
新贡献者II

非常感谢!这很有帮助

0荣誉