Suite

Trouver un champ d'attribut vide avec le curseur de recherche ArcPy ?


J'essaie de parcourir tous les champs de mes classes d'entités pour trouver quels champs sont vides.

J'ai essayé d'utiliser le SearchCursor en empruntant des morceaux de code à d'autres réponses.

Voilà ce que j'ai :

if fieldList : avec arcpy.da.SearchCursor(fc2, fieldList) comme curseur : pour la ligne dans le curseur : if all(row)== NULL : print row.name + "est vide"

Où vais-je mal?


Ce que vous faites ne fonctionnera pas. all renvoie un booléen. De plus, Python ne reconnaît pasNUL.

Essaye ça:

if fieldList : avec arcpy.da.SearchCursor(fc2, ['[email protected]'] + fieldList) comme curseur : pour la ligne dans le curseur : sinon filter(None, row[1:]) : print "{} est vide". format(ligne[0])

Les zéros seront ignorés dans le cas ci-dessus, ce qui peut être une valeur valide. Si vous voulez vraiment vérifier les valeurs vides, il vaut mieux être explicite comme ceci :

if fieldList : avec arcpy.da.SearchCursor(fc2, ['[email protected]'] + fieldList) comme curseur : pour la ligne dans le curseur : sinon filtre(lambda x : x pas dans (Aucun,"), ligne[1 :] ): print "{} est vide".format(row[0])

Ma méthode de prédilection : Obtenez votre liste de champs. Itérer dans chaque champ. Utilisez la compréhension de liste pour créer une liste de valeurs non nulles. Si votre liste retourne vide, vous savez que le champ contient toutes les valeurs nulles. Ce n'est probablement pas le plus rapide en raison des multiples curseurs, mais il est, espérons-le, facile à comprendre.

Code (non testé) :

#Input feature class inFc = r"c:	est	est.gdb	est" import arcpy #get list of fields fields = [f.name for f in arcpy.ListFields (inFc)] #Itérer les champs pour le champ dans les champs : #get list of values ​​values ​​= [r[0] for r in arcpy.da.SearchCursor (inFc, field) if r[0] != None] #Vérifiez si la liste est vide sinon les valeurs : print field, "est vide "

Cela peut être déterminé avec un seulRechercheCurseur. Itérez chaque ligne et lorsqu'un champ est déterminé à avoir une valeur, ajoutez le champ à un ensemble de champs avec des valeurs. Tout champ qui ne figure pas dans la liste à la fin de votre curseur est un champ nul.

#Input feature class inFc = r"c:	est	est.gdb	est" import arcpy #get list of fields flds = [f.name for f in arcpy.ListFields (inFc)] #get field length and indexes fldLen = len (flds) fldRange = range (fldLen) #set pour stocker les champs avec des valeurs valFlds = set () #create curseur avec arcpy.da.SearchCursor (inFc, flds) as curs: #iterate rows for row in curs: #add fields with values ​​to set of value fields valFlds.update ([flds [i] for i in fldRange if row [i] != None]) #vérifier si tous les champs ont été déterminés à avoir des valeurs if len (valFlds) == fldLen : #tous les champs ont des valeurs. pause curseur boucle pause #déterminer les champs nuls nullFlds = [f pour f dans flds si ce n'est pas f dans valFlds] #vérifier les champs nuls si nullFlds : #itérer/imprimer les champs nuls imprimer « champs nuls : » pour fld dans nullFlds : imprimer fld else : #pas de champs nuls print "pas de champs nuls"


Voir la vidéo: Create Points from a Table in ArcGIS Pro (Octobre 2021).