<\/HEAD>
Hola a todos,<\/P>
<\/P>
Estoy intentando leer información de un archivo shape (.shp) y tengo un pequeño problema cuando la función ListFields() intenta leer el archivo. Aquí en este código, estoy pasando manualmente el archivo para verificar.<\/P>
<\/P>
for <\/STRONG><\/SPAN>field <\/SPAN>in <\/STRONG><\/SPAN>arcpy.ListFields(<\/SPAN>"L:<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>historical_data<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko County<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer_Network_DBO_ssLateralLine.shp"<\/STRONG><\/SPAN>😞<\/span><\/SPAN><\/P><\/P>La línea anterior lanza una excepción diciendo, El archivo no existe.<\/P>El f = arcpy.ListFeatureClasses() esto devuelve los valores correctos. <\/SPAN><\/PRE>Ahora la parte interesante es que este código funciona bien en la versión de escritorio del código python. Y cuando intento ejecutar el mismo código desde la versión web, devuelve ese error mencionado.<\/SPAN>Luego todo el código de la función se muestra a continuación:<\/SPAN><\/SPAN><\/P><\/P>def <\/STRONG><\/SPAN>connectSource(<\/SPAN>self<\/SPAN>, filepath):
<\/SPAN>"""
Conectar a un archivo y crear una estructura de datos tipo diccionario que contendrá
clases de entidades :ShapeTypes y nombres de campos :Type
"""
<\/EM><\/SPAN>self<\/SPAN>.feature.clear()
listfield = <\/SPAN>list<\/SPAN>()
<\/SPAN>try<\/STRONG><\/SPAN>:
<\/SPAN># establecer workspace al archivo conectado
<\/EM><\/SPAN>arcpy.env.workspace = filepath
<\/SPAN># Obtener lista de todas las entidades
<\/EM><\/SPAN>f = arcpy.ListFeatureClasses()
<\/SPAN>print<\/STRONG><\/SPAN>(f)
<\/SPAN>for <\/STRONG><\/SPAN>f1 <\/SPAN>in <\/STRONG><\/SPAN>f:
listfield[:] = []
i = 0
# Iterar a través de la lista de campos
print(f1)
for field in arcpy.ListFields("L:\\historical_data\\Elko County\\Elko_Sewer\\Elko_Sewer_Network_DBO_ssLateralLine.shp"😞
print('ADC1')
# Filtrar campo
if field.type not in['OID']:
# and field.length < ;51:
# Almacenar nombre y tipo de campo en una lista
listfield.insert(i, field.name + </ span >< span class ='lia-green lia-fontsize -90' > "& nbsp ; " </ span > + field.type)< br / > < br / > # Convertir lista en tupla
< br / > hup = tuple(listfield)< br / > < br / > i += </ span >< span class ='lia-blue lia-fontsize -90' >1
< br / > # Obtener tipo Shape de cada clase de entidad
< br / > type = arcpy.Describe(f1)< br / > < br / > print("t"+type)< br / > # Filtrar por tipo Shape
< br / > if type.ShapeType == "Point":< br / > < br / > # Almacenar cada clase de entidad como claves y nombre del campo (tupla) como valores en un diccionario
< br / > self.feature[f1, type.ShapeType] = hup
<\/SPAN>elif <\/STRONG><\/SPAN>type.ShapeType <\/SPAN>in <\/STRONG><\/SPAN>[<\/SPAN>'Polyline'<\/STRONG><\/SPAN>, <\/SPAN>'Line'<\/STRONG><\/SPAN>]:
<\/SPAN>self<\/SPAN>.feature[f1, type.ShapeType] = hup
<\/SPAN>except <\/STRONG><\/SPAN>Exception as <\/STRONG><\/SPAN>e:
<\/SPAN>print <\/STRONG><\/SPAN>(<\/SPAN>"Archivo incorrecto"<\/STRONG><\/SPAN>+e.message)
tkMessageBox.showerror(<\/SPAN>"Conexión al archivo fuente"<\/STRONG><\/SPAN>, <\/SPAN>"Error al conectar con el archivo.{0} "<\/STRONG><\/SPAN>.format(e))
<\/SPAN>return <\/STRONG><\/SPAN>0<\/SPAN> <\/SPAN><\/SPAN><\/P><\/P>El mismo código en formato web lanza una excepción que el archivo no existe. Mientras que en la versión de escritorio funciona perfectamente. <\/SPAN><\/P><\/P>arcpy.ListFields(<\/SPAN>"L:<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>historical_data<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko County<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer_Network_DBO_ssLateralLine.shp")<\/STRONG><\/SPAN> <\/STRONG><\/SPAN><\/SPAN><\/P><\/P>Esta función ListFields() no puede devolver / leer el valor.<\/SPAN><\/P><\/P>Por favor, guíame dónde estoy equivocado.<\/SPAN><\/P><\/P>EDITAR 1:<\/SPAN><\/P><\/P>Estoy intentando desarrollar una aplicación python flask donde quiero que este bloque de código se ejecute al hacer clic en un botón de un archivo HTML.<\/P>Así que la aplicación se está ejecutando en http:\/\127.0.0.1\5000\<\/A> y una vez que hago clic en ese botón, la siguiente función se ejecuta.<\/P>La siguiente función se ejecuta al hacer clic en ese botón:<\/P>
@app.route<\/SPAN >(<'POST'>)
'/open_file'< /strong >, methods=[ 'POST'
]
def open_file():
& nbsp ; & nbsp ; & nbsp ; proce(os.path.abspath('uploads/Elko_Sewer'))
& nbsp ; & nbsp ; & nbsp ; print('END OPEN')
& nbsp ; & nbsp ; & nbsp ; return render_template('view.html')
& nbsp ;
En el código anterior, la función proce() contiene todo ese código para leer desde el archivo shp.< /p >
& nbsp ;
La parte interesante es que cuando llamo a proce() dentro de la función principal de la aplicación flask, realmente funciona perfecto. Y antes de que se active el depurador, ejecuta el código e imprime la salida en la consola del depurador. Estoy usando PyCharm para desarrollar y depurar.< /p >
< strongstyle ='color :navy;font - size :9 . pt;' > if </ strong > __name__ == ' __main__ ':< br /> & nbsp ; & nbsp ; & nbsp ; proce(os.path.abspath('uploads/Elko_Sewer'))< br /> & nbsp ; & nbsp ; & nbsp ; app.run(< br /> & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; ) debug=True)< / span ></ p >< p > < / p >< p > Saludos < / p >< p > Priyam < / p >< / BODY > < / HTML >