ArcPyを使用して選択した行を削除するにはどうすればよいですか?


10

フィーチャクラスのすべての行を削除したいが、行1〜5は残したい。一方、最初の5行は残し、その他は削除したい。検索カーソルと更新カーソルを使用する必要があることはわかっていますが、使用できませんでした。ArcPyを使用して行を削除するにはどうすればよいですか?


1
属性 "FID"> 4で選択し、arcpy.Deletefeaturesを使用します
FelixIP、

好奇心旺盛なので、なぜカーソルを使用できないのですか?
fatih_dur 2015年

@fatih_durはArcpyの初心者のため
BBG_GIS

import arcpy fc = r'C:\ temp \ test.gdb \ tmp 'expression = "objectid> 5" with arcpy.da.UpdateCursor(fc、 "OBJECTID"、where_clause = expression)as cursor:for row in cursor:if row [0]> 5:cursor.deleteRow()
kumar 2018年

回答:


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。1つの質問、OIDが1から始まっておらず、連続していない場合はどうなりますか?
fatih_dur 2015年

@アーロンありがとう。「OBJECTID」名の代わりにオブジェクトIDフィールドタイプを使用することは可能ですか?一部のレイヤーではオブジェクトIDの名前が異なるためです。
BBG_GIS 2015年

@faith_dur「OID」と「OBJECTID」の同等化に注意してください。ソース形式が動作を決定します。シェープファイルのOID ROWID列は不変(ゼロベース)ですが、エンタープライズまたはファイルジオデータベースのOBJECTIDは初期化後も値を保持します(通常は1ベースです)。現在の最初の5行を識別するには、ORDER BYとLIMITを指定したSQLサブクエリが必要になるという良い点があります。
ビンス

1
@wetlandはい、OID@トークンを使用できます。「OBJECTID」を「OID @」に置き換えるだけです。
アーロン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.