使用 Arcpy UpdateCursor 编辑属性表
在本教程中,我们将使用 UpdateCursor 对象来编辑属性表。具体来说,我们会将来自三个单独字段的字段值连接到一个字段值,并为游标对象的每次迭代应用字符串格式。
arcpy UpdateCursor对象创建与数据文件的读写连接,以便可以更改记录。在本教程中,我们将演示如何使用 UpdateCursor 将数据从多列重新格式化为同一数据文件中的一个单一字段。
UpdateCursor 用例:连接和格式化街道地址数据
对于本教程,我们将再次使用 ArcGIS Online 中的 Hospitals_England 要素服务要素类,该要素类已添加到一个新的空项目文件中。在我们开始之前,让我们看一下属性表,特别是三列:Address1、Address2 和 Address3。
下图显示单个医院的地址被分成三个独立的地址字段,其中一些是空的。这里的目标是编写一个 Python 脚本,通过在不同地址部分之间使用逗号和空格,以一种格式良好的方式将现有地址数据连接到一个字段中。新的格式化地址字符串值将覆盖 Address1 字段中的现有数据。最后,我们将删除 Address2 和 Address3,因为在加入字段值后它们将不再需要。这一切都是使用 arcpy 模块完成的。
怎么做
在我们开始编写代码之前,我们需要将我们的数据复制到一个新的要素类,因为无法编辑要素服务要素层的属性字段数据。Copy Features 地理处理创建一个本地引用的数据副本,以后可以编辑,所以我们将首先这样做。运行复制要素地理处理工具,将 Hospitals_England 要素服务要素图层引用为输入要素,并命名输出要素类:
Hospitals_England 的副本应该会自动添加到您的地图窗口中。我们将使用 arcpy 编辑这个新要素类的属性表。接下来,打开一个新笔记本并运行以下代码来创建和运行 UpdateCursor,格式化各个字段并删除 Address2 和 Address3 字段:
怎么运行的
首先,我们导入 arcpy 模块。接下来,我们引用要编辑的要素类,这是我们使用复制要素工具创建的文件。然后,我们用一个列表项引用这些字段,该列表项包含将使用 UpdateCursor 重新格式化的三个数据字段。具体来说,来自 Address1 的当前数据将被一个新字符串覆盖,该新字符串连接来自 Address1、Address2 和 Address3 的三个独立字符串。接下来,我们创建一个 UpdateCursor 对象并传入之前定义的要素类和字段变量。该对象作为迭代器对象应用,迭代文件属性表的每一行。
此脚本的大部分存在一个长的 if-else 子句,它指定如何格式化每一行。这是必要的,因为我们有许多字段缺少一个或多个字段值。为确保 Python 正确格式化每个地址字段,我们必须检查每一行是否存在一个或多个缺失字段值,并根据该条件正确格式化地址数据:即在前面添加或不添加逗号或空格或在字段值之后。
“cursor.updateRow(row)”行根据 if-else 子句中的匹配条件应用 UpdateRow 游标对象。运行代码后,打开 Hospitals_England_Copyfeatures 图层的属性表并查看 Address1 列中的新值。下面列出了结果输出的一个片段:注意为多个地址部分和没有空格和逗号的单个字段地址值添加的空格和逗号:
此图像包含整个脚本: