Suite

Essayer de supprimer des valeurs identiques dans un curseur de mise à jour

Essayer de supprimer des valeurs identiques dans un curseur de mise à jour


J'essaie d'utiliser l'outil DeleteIdentical_management dans un curseur de mise à jour. Je suis presque sûr que je m'y prends dans le mauvais sens, j'aimerais voir si quelqu'un pourrait m'aider. Je suis relativement nouveau sur python, alors soyez indulgents avec moi. Voici mon bout de code :

#Supprimer les fonctionnalités identiques basées sur le champ Nom de champ et Numéro de plate-forme, sans supprimer les noms de champ avec des valeurs nulles. FC = r'C:ScriptsDrilling_Rig_DeduplicationDrilling_Rigs.gdbMERGED_RIGS' cursor = arcpy.UpdateCursor(FC) pour la ligne dans le curseur : fieldValue = row.FIELD_NAME si row.FIELD_NAME n'est pas Aucun : arcpy.DeleteIdentical_management(FC, "FIELD_NAME","RGNMBRCLC"]) else: print "rien à supprimer" del row, curseur print "deup process done" print arcpy.GetMessages()

Ce que j'aimerais qu'il se passe, c'est que arcpy ignore les lignes où il y a une valeur NULL dans le champ FIELD_NAME. Demandez ensuite à l'outil delete_identical de parcourir le reste des lignes et de supprimer les enregistrements en double. - Des idées?


Votre outil actuel s'exécute "delete identique" autant de fois que vous avez une ligne avec une valeur dans field_name. Voici une solution de contournement suggérée pour réaliser ce que vous essayez de faire :

1) sélectionnez toutes les lignes sans valeur pour le field_name

2) calculer une valeur temporaire unique pour ces champs (par exemple "temp_"+str(!ID!) )

3) effacer la sélection et exécuter la suppression identique

4) remettre les valeurs field_name sur Aucun


Je suggérerais une méthode différente pour accomplir cette tâche. Si vous souhaitez supprimer des éléments identiques tant qu'un champ particulier n'est pas nul, je créerais une couche d'entités avec des enregistrements lorsque c'est le cas, puis effectuerais votre suppression.

Cela accomplirait votre tâche sans curseur :

FC = r'C:ScriptsDrilling_Rig_DeduplicationDrilling_Rigs.gdbMERGED_RIGS' sql = '"FIELD_NAME" IS NOT NULL' #Créer une couche d'entités avec uniquement les enregistrements où FIELD_NAME est rempli arcpy.MakeFeatureLayer_management (FC, "lyr", sql) #Delete identique arcpy.DeleteIdentical_management("lyr", ["FIELD_NAME","RGNMBRCLC"]) #clean up arcpy.Delete_management ("lyr")

J'espère que ça aide!