操作方法

操作方法:在 ArcGIS Pro 中使用 ArcPy 查找字段缺失的序号

Last Published: May 6, 2024

描述

在 ArcGIS Pro 中,某些数据可能包含序号,用于维护数据完整性、确保数据质量以及支持空间分析。 在某些情况下,数据中存在缺失的序号,这可能导致错误,进而引起分析中的不一致或不准确,如下图所示。

缺失的序号

本文介绍了在 ArcGIS Pro 中使用 ArcPy 查找字段缺失序号的工作流。

解决方案或解决方法

Note:
This workflow requires a full script to run in the ArcGIS Pro Python window. All the indents must be retained as portrayed in the code block.
  1. 在 ArcGIS Pro 中,打开包含带有序号的要素图层的地图。
  2. 打开 Python 窗口。 有关详细信息,请参阅 ArcGIS Pro:Python 窗口
  3. 运行以下脚本。
    1. 初始化一个列表以存储现有序号。
import arcpy

def find_missing_sequence(fc, field_name):
    sequence_numbers = []
  1. 创建一个搜索光标以遍历要素类并将字段值转换为整数。
    with arcpy.da.SearchCursor(fc, [field_name]) as cursor:
        for row in cursor:
            # Convert the field value to an integer (assuming it's a float)
            sequence_numbers.append(int(row[0]))
  1. 查找最小和最大序号。
    min_seq = min(sequence_numbers)
    max_seq = max(sequence_numbers)
  1. 创建所有预期序号的列表。
    expected_sequence = list(range(min_seq, max_seq + 1))
  1. 查找缺失的序号。
    missing_sequence = [num for num in expected_sequence if num not in sequence_numbers]

    return missing_sequence
  1. 设置要素类和字段名称。 将 <featureClassName> 替换为要素类的名称。 将 <fieldName> 替换为字段的名称。
if __name__ == "__main__":
    fc = "<featureClassName>"
    field_name = "<fieldName>"
  1. 调用函数以查找并打印缺失的序号。
    missing_sequence = find_missing_sequence(fc, field_name)

    if missing_sequence:
        print("Missing sequence number(s):", missing_sequence)
    else:
        print("No missing sequence numbers found.")

以下代码块演示了完整工作脚本。

import arcpy

def find_missing_sequence(fc, field_name):
    sequence_numbers = []

    with arcpy.da.SearchCursor(fc, [field_name]) as cursor:
        for row in cursor:
            sequence_numbers.append(int(row[0]))

    min_seq = min(sequence_numbers)
    max_seq = max(sequence_numbers)

    expected_sequence = list(range(min_seq, max_seq + 1))

    missing_sequence = [num for num in expected_sequence if num not in sequence_numbers]

    return missing_sequence

if __name__ == "__main__":
    fc = "Point1"
    field_name = "Sequence"

    missing_sequence = find_missing_sequence(fc, field_name)

    if missing_sequence:
        print("Missing sequence number(s):", missing_sequence)
    else:
        print("No missing sequence numbers found.")

下图显示了使用 ArcPy 在字段中查找缺失序号的结果。

字段中缺失的序号

文章 ID: 000032437

获得人工智能支持

使用 Esri Support AI Chatbot 快速解决您的问题。

立即开始聊天

相关信息

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

立即开始聊天

转至下载选项