4 votos

Corregir la expresión SQL al bucle campos diferentes

Estoy teniendo problemas con el seguimiento de líneas de código. Prácticamente lo que yo estoy haciendo es un 10 shapefile bucle en el campo que representa el nombre del campo que quiero ser calculado( el nombre varía según cada shapefile y el nombre de la columna es también el nombre del archivo). Ya es 10 de shapefiles, quiero que cada uno se calcula de forma individual para el nuevo campo que he creado. Todo funciona bien, excepto la expresión SQL. No tengo idea de cómo dar formato a la expresión en la que el campo está dividido por el [MinorityS] campo. Si yo fuera a hacer sin el bucle sería la expresión de '[Cubano] / [MinorityS]'. Sólo quiero Cubano el 10 de archivos de forma que en este caso es el campo que representa a todos los nombres de campo que yo quiero estar en ese primer tramo de la Cubana.

import arcpy
arcpy.env.workspace = r"myworkspace"
arcpy.env.overwriteOutput = True
MetroCT =  r"metrotracts"

Fieldslist = arcpy.ListFields(MetroCT)
Metrofields = [f.name for f in arcpy.ListFields(MetroCT)]
Clusterslist = ["SouthAmeri", "SpanishSpa", "Mexican", "PuertoRica", "Cuban", "Dominican", "CentralAme", "European", "Arab", "Africans"]


for field in Clusterslist:
    out = field + ".shp"
    Cluster = arcpy.ClustersOutliers_stats(MetroCT, field, out)
    output = field + "1"+".shp"
    HHClusters = arcpy.FeatureClassToFeatureClass_conversion(Cluster,r"mylocation", output, "\"COType\" = 'HH'")
    arcpy.AddField_management(HHClusters, "MinorityS", "LONG", 10)
    cursor = arcpy.da.SearchCursor(Cluster, field)
    summed_total = 0
    for row in cursor:
        summed_total = summed_total + row[0]
        arcpy.CalculateField_management(HHClusters, "MinorityS", summed_total)
    arcpy.AddField_management(HHClusters, "MinbyTot", "LONG", 10)
    expressionmin = expressionmin = '[{}] / [MinorityS]'.format(field)
    arcpy.CalculateField_management(HHClusters, "MinbyTot", expressionmin, "VB")

5voto

Aaron Puntos 25882

Puede simplificar la secuencia de comandos mediante el uso de un UpdateCursor en lugar de calcular el campo. En este ejemplo, "field_c" es vacío y el campo que está siendo calculado.

4voto

Gavin Schulz Puntos 592

Sin ver más de tu código, prueba esto:

 arcpy.AddField_management(HHClusters, "MinbyTot", "LONG", 10)
expressionmin = '[{}] / [MinorityS]'.format(field)
arcpy.CalculateField_management(HHClusters, "MinbyTot", expressionmin, "VB")
 

Con su segundo campo [MinorityS] entre corchetes, creo que su primer campo también debe estar entre corchetes - '[yourfield] / [MinorityS]' .

'[{}] / [MinorityS]'.format(field) lugar de '[' + field + '] / [MinorityS]'

Alternativamente, intente cambiar de VB a Python tipo de expresión:

 arcpy.AddField_management(HHClusters, "MinbyTot", "LONG", 10)
expressionmin = '!{}! / !MinorityS!'.format(field)
arcpy.CalculateField_management(HHClusters, "MinbyTot", expressionmin, "PYTHON_9.3")
 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X