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: