2 votos

Utilización de una tabla de consulta en Python para comparar registros con geodatabases existentes

Estoy tratando de usar python para buscar a través de una tabla de acceso que contiene instalaciones que necesitan tener geodatabases con geodatabases que ya existen con el fin de generar una lista de geodatabases de instalaciones que todavía necesitan ser creadas. El script funciona, pero el bucle se detiene en el primer registro de la tabla y no continúa recorriendo el resto de los registros.

Esto es lo que tengo:

lookuptbl = r"P:\\USACE Mobile 0610-01 2010 63D RSC NR Contract\\03-Source Documents\\GIS\\SITE_ID_LOOKUP.mdb\\new_facility"
q = '[include_in_gis] = ' + "'" + "X" + "'"

rows = gp.SearchCursor(lookuptbl, q)
row = rows.next()

while row:
    facil_id = row.GetValue("facil_id")
    lookuptbl2 = r"P:\\USACE Mobile 0610-01 2010 63D RSC NR Contract\\03-Source     Documents\\GIS\\SITE_ID_LOOKUP.mdb\\gdbs"
    q2 = '[facil_id_in_gdbs] = ' + "'" + facil_id + "'"
    #IF q is satisfied, the gdb that is currently being processed was found in lookup table;
    #If q is NOT satisfied, the script will skip the gdb alltogether; nothing will be done

    rows = gp.SearchCursor(lookuptbl2, q2)
    row = rows.next()

    while row:
        print facil_id + "--already exists"
        row = rows.next()

    row = rows.next()        

Soy nuevo en esto de los guiones.

6voto

Puede ser porque reinicias el searchcursor en el primer bucle while.

import arcpy
a_file = "c:/temp/x.shp"
desc = arcpy.Describe
rows = arcpy.SearchCursor(a_file)
row = rows.next()
some_field = desc(a_file).OIDFieldName

another_file = "c:/temp/x1.shp"
some_field2 = desc(another_file).OIDFieldName

msg = ""
while row:
  msg += "\nrow : " + str(row.getValue(some_field)) + "\n  row2"
  #
  rows2 = arcpy.SearchCursor(a_file)
  row2 = rows.next()
  while row2:
    msg += " " + str(row2.getValue(some_field2))
    row2 = rows2.next()
  row = rows.next()
print msg

En el ejemplo anterior se consultaron dos shapefiles en el campo FID, estos son los resultados

fila : 0 fila2 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

.....snip

fila : 14 row2 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

que representan las consultas anidadas. Si los elementos rows2 y row2 se cambian por rows y row, entonces la salida es

fila : 0 fila2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

que no es lo que quieres, supongo.

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