使用 Arcpy UpdateCursor 编辑属性表

17 篇文章 1 订阅
5 篇文章 1 订阅
本教程介绍了如何使用Arcpy的UpdateCursor对象编辑属性表,将多个地址字段合并成一个格式化的字符串,并删除不再需要的字段。通过创建一个Python脚本,对数据进行复制,然后使用UpdateCursor连接和格式化地址数据,最终更新Address1字段并删除Address2和Address3字段。
摘要由CSDN通过智能技术生成

使用 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 列中的新值。下面列出了结果输出的一个片段:注意为多个地址部分和没有空格和逗号的单个字段地址值添加的空格和逗号:

 此图像包含整个脚本:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用arcpy读取属性,可以使用arcpy.SearchCursor函数。首先,你需要指定要读取的要素类或图层。然后,使用SearchCursor函数创建一个游标对象,该对象可以用于遍历要素类中的每一行。在循环中,你可以使用row.getValue("字段名")来获取每一行的属性值。下面是一个示例代码: ```python import arcpy # 指定要读取的要素类或图层 zone = 'zone31' # 创建游标对象 rows = arcpy.SearchCursor(zone) # 遍历每一行并获取属性值 for row in rows: value = row.getValue("字段名") print(value) ``` 请注意,你需要将"字段名"替换为你要读取的属性字段的名称。这样,你就可以使用arcpy来读取属性了。\[2\] #### 引用[.reference_title] - *1* [Arcpy之要素字段属性获取并写入xls](https://blog.csdn.net/u014685432/article/details/127889046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [学习记录:在ArcGIS中利用arcpy获取属性内容](https://blog.csdn.net/weixin_46506178/article/details/122272780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS 数据栈

谢谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值