4 votos

La conversión de secuencia de comandos de python para la caja de herramientas?

Estoy tratando de convertir mi llanura secuencia de comandos de python para la secuencia de comandos en ArcToolbox para compartir, donde el usuario puede definir los datos de entrada (en este caso, una clase de entidad). Por desgracia, la Conversión de Python (ArcPy) secuencia de comandos en la herramienta o de la caja de herramientas de secuencia de comandos? no proporcionan una respuesta para mí, aunque he intentado seguir.

Este es mi guión de trabajo que se está trabajando bien cuando se ejecuta desde la ventana de python.

import arcpy
fcLst = [r"D:\GIS_Temp\Folder B\Water.shp"]
for fc in fcLst:
fieldList = [f.name for f in arcpy.ListFields(fc) if f.type == "String"]
if fieldList:
    with arcpy.da.UpdateCursor(fc, fieldList) as cursor:
        for row in cursor:
            for i in range (len(fieldList)):
                row[i] = row[i].replace("!","1")
                cursor.updateRow(row)

Quiero hacer un script en ArcToolbox, con este código, donde el usuario puede seleccionar para que la clase de entidad quiere modificar los datos (en este caso, "D:\GIS_Temp\Folder B\Water.shp")

En ArcToolbox que he creado de nuevo script, hacer click en "almacenar las rutas relativas de los nombres (en lugar de rutas absolutas), y vaya a mi el código de python, que he tratado de editar dado la respuesta en el post he enlazado.

Esta es la secuencia de comandos de python para la caja de herramientas (que no funciona):

import arcpy
fcLst = arcpy.GetParameterAsText(0)
for fc in fcLst:
fieldList = [f.name for f in arcpy.ListFields(fc) if f.type == "String"]
if fieldList:
    with arcpy.da.UpdateCursor(fc, fieldList) as cursor:
        for row in cursor:
            for i in range (len(fieldList)):
                row[i] = row[i].replace("!","1")
                cursor.updateRow(row)

Como se puede ver, pongo arcpy.GetParameterAsText(0) en código, de modo que el usuario puede seleccionar propios datos a modificar. Pero me da este error:

Traceback (la mayoría de llamada reciente last): File "C:\Users\Name\Desktop\Script.py", línea 4, en fieldList = [f.nombre de f en arcpy.ListFields(fc) si f.tipo == "Cadena"] Archivo "C:\Program Files\ArcGIS\Desktop10.1\arcpy\arcpy__init__.py", la línea de 1075, en ListFields volver gp.listFields(conjunto de datos, wild_card, field_type) Archivo "C:\Program Files\ArcGIS\Desktop10.1\arcpy\arcpy\geoprocessing_base.py", la línea de 344, en listFields auto._gp.ListFields(*gp_fixargs(args, True))) IOError: "D" no existe, no se pudo ejecutar (secuencia de Comandos).

Lo que me estoy perdiendo? Tengo número decente de los códigos de trabajo en python, pero quiero, finalmente, convertir a todos en secuencias de comandos en el cuadro de herramientas y compartirla con otros usuarios. ¿Cuál es el principal proceso para la conversión de los códigos, y que las partes de los códigos, dado el ejemplo?

EDITAR: Esta es la ficha he editado para la secuencia de comandos para los parámetros: enter image description here

5voto

gcycle7 Puntos 11

Usted es un 99% no. El problema que tiene es que la arcpy.getParameterAsText es la devolución de un semi-separada por puntos de la cadena.(por ejemplo, "FCpath1;FCpath2" )

Esta no es una lista (por ejemplo, ['FCpath1','FCpath2'] ) como la que tenía antes.

Su guión está ahora iterando sobre la cadena, pasando por la primera letra en lugar de la ruta de acceso completa. Basado en el error, podemos ver que su primera entrada es a partir de la "D" de la unidad)

Convertir el parámetro de entrada en una lista como la que había antes de usar fcLst.split( ";"). Esto debería solucionar el problema. Esto es debido a que .split(";") devuelve [lista]

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