3

現在、2つのフィールドに入力しようとしています。これらは両方とも、既存のフィーチャクラスからのデータを入力するテーブル内にすでに作成されています。アイデアは、特定のプロジェクト番号に一致する目的のフィーチャクラスからすべてのデータをコピーすることです。プロジェクト番号に一致する行は、一致するフィールドを持つ空白のテンプレートにコピーされます。これまでのところ、オブジェクトIDフィールドとフィーチャクラスの名前のデータをテーブル内の2つのフィールドにプッシュする必要があることを除いて、すべて問題ありません。

**def featureClassName(table_path):
    arcpy.AddMessage("Calculating Feature Class Name...")
    print "Calculating Feature Class Name..."
    featureClass = "FeatureClass"
    SDE_ID = "SDE_ID"
    fc_desc = arcpy.Describe(table_path)
    lists = arcpy.ListFields(table_path)
    print lists
   with arcpy.da.SearchCursor(table_path, featureClass = "\"NAME\"" + " Is NULL") as  cursor:
        for row in cursor:
            print row
            if row.FEATURECLASS = str.replace(row.FEATURECLASS, "*", fc):
                cursor.updateRow(row)
                    print row
        del cursor, row
            else:
                pass**

上記のコードは私の試みであり、多くの場合、フィールドにFeatureクラスの名前を入力します。私はOIDで同じことをしようとしました。

**for fc in fcs:
print fc
if fc:
    print "Making Layer..."
    lyr = arcpy.MakeFeatureLayer_management (fc, r"in_memory\temp", whereClause)
    fcCount = int(arcpy.GetCount_management(lyr).getOutput(0))
    print fcCount
    if fcCount > 0:
        tbl = arcpy.CopyRows_management(lyr, r"in_memory\temp2")
        arcpy.AddMessage("Checking for Feature Class Name...")
        arcpy.AddMessage("Appending...")
        print "Appending..."
        arcpy.Append_management(tbl, table_path, "NO_TEST")
        print "Checking for Feature Class Name..."
        featureClassName(table_path)
        del fc, tbl, lyr, fcCount
        arcpy.Delete_management(r"in_memory\temp")
        arcpy.Delete_management(r"in_memory\temp2")
    else:
        arcpy.AddMessage("Pass... " + fc)
        print ("Pass... " + fc)
        del fc, lyr, fcCount
        arcpy.Delete_management(r"in_memory\temp")
        pass**

このコードは、データセット内のフィーチャクラスのメインループであり、データをテーブルにコピーするために使用する新しいレイヤー/テーブルを作成します。フィーチャクラス名とOIDのデータにはプッシュするデータがないため、行き詰まります。

みんなありがとう

4

1 に答える 1

2

あなたは多くの問題を抱えています。まず、カーソルが正しく設定されていません。更新する場合はupdateCursorである必要があります。ちなみに、誤って呼び出したsearchCursorを呼び出しました。次に、 "if row.FEATURECLASS ...の行で==(等式比較)の代わりに=(割り当て)を使用しました。その下の2行で、インデントが数行で混乱しています。関数はfcの値を知っています。確かにそれを引数として渡します。他にもたくさんの問題がありますが、うまくいく例を挙げてみましょう。それを調べることができます。

def featureClassName(table_path, fc):
    '''Will update the FEATURECLASS FIELD in table_path rows with 
      value of fc (string) where FEATURECLASS field is currently null '''

    arcpy.AddMessage("Calculating Feature Class Name...")
    print "Calculating Feature Class Name..."

    #delimit field correctly for the query expression
    df = arcpy.AddFieldDelimiters(fc, 'FEATURECLASS')
    ex = df + " is NULL"
    flds = ['FEATURECLASS']
    #in case we don't get rows, del will bomb below unless we put in a ref 
    #to row 
    row = None
    #do the work
    with arcpy.da.UpdateCursor(table_path, flds, ex) as cursor:
        for row in cursor:
            row[0] = fc #or basename, don't know which you want
            cursor.updateRow(row)
    del cursor, row

fcの名前をargとして渡していることに注意してください。そのため、コードの残りの部分でそれを処理する必要があります。また、異なるfcには異なる区切り文字が必要であり、ドキュメントはこれについてまったく明確ではないため、AddFieldDelimiterを使用することをお勧めします(場合によっては間違っていることもあります)。

頑張って、マイク

于 2012-11-18T17:08:28.587 に答える