ArcPy를 사용하여 선택된 행을 삭제하는 방법?


10

피처 클래스의 모든 행을 삭제하고 싶지만 1-5 행을 유지하려고합니다. 반면에 처음 5 개의 행을 유지하고 다른 행을 삭제하려고합니다. 검색 커서와 업데이트 커서를 사용해야하지만 사용할 수 없다는 것을 알고 있습니다. ArcPy를 사용하여 행을 어떻게 삭제합니까?


1
속성 "FID"> 4 및 사용 arcpy.Deletefeatures에 의해 선택
FelixIP

curoisty에서 커서를 사용할 수없는 이유는 무엇입니까?
fatih_dur

내가 Arcpy 초보자이기 때문에 @fatih_dur
BBG_GIS

import arcpy fc = r'C : \ temp \ test.gdb \ tmp 'expression = arcpy.da.UpdateCursor (fc, "OBJECTID", where_clause = expression)를 커서로하여 "objectid> 5": 커서의 행 : if row [0]> 5 : cursor.deleteRow ()
kumar

답변:


24

업데이트 커서 를 사용 하여 조건에 따라 행을 삭제할 수 있습니다. 이 예에서 OBJECTID> 5 인 모든 행이 삭제됩니다.

import arcpy

fc = r'C:\temp\test.gdb\tmp'

with arcpy.da.UpdateCursor(fc, "OBJECTID") as cursor:
    for row in cursor:
        if row[0] > 5:
            cursor.deleteRow()

또는 속성 별 레이어 선택 (데이터 관리)을 사용 하십시오 .

import arcpy, os

fc = r'C:\temp\test.gdb\tmp'
outws = r'C:\temp\test.gdb'

# Make a layer from the feature class
arcpy.MakeFeatureLayer_management(fc, "fc_lyr")

# Use a SQL query to select OBJECTID 1 - 5
arcpy.SelectLayerByAttribute_management("fc_lyr", "", ' "OBJECTID" <= 5 ')

# Write the selected features to a new feature class
arcpy.CopyFeatures_management("fc_lyr", os.path.join(outws, "fc_out"))

시스템 리소스가 허용하는 한 원래 기능을 유지하기 위해 +1. 한 가지 질문은 OID가 1에서 시작하지 않고 연속적이지 않은 경우 어떻게해야합니까?
fatih_dur

@Aaron 감사합니다. "OBJECTID"이름 대신 객체 ID 필드 유형을 사용할 수 있습니까? 일부 레이어에서는 객체 ID의 이름이 다르기 때문입니다.
BBG_GIS

@faith_dur "OID"및 "OBJECTID"와 동일하게주의하십시오. 소스 형식은 동작을 나타냅니다. shapefile의 OID rowid 열은 변경할 수 없으며 0 기반이며 엔터프라이즈 또는 파일 지오 데이터베이스 OBJECTID는 초기화 후에도 값을 유지하며 일반적으로 1 기반입니다. 현재 처음 5 개의 행을 식별하려면 ORDER BY 및 LIMIT가있는 SQL 서브 쿼리가 필요하다는 것이 좋습니다.
빈스

1
@wetland 예, OID@토큰을 사용할 수 있습니다. 간단히 "OBJECTID"를 "OID @"로 바꾸십시오.
Aaron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.