Estoy teniendo problemas al intentar realizar operaciones sencillas de gestión de carpetas en una caja de herramientas de ArcGIS python. En primer lugar aquí hay algunos fragmentos de código (he dejado fuera todo lo que no pertenece a este problema):
import os
def getParameterInfo(self):
#define the parameters for the toolbox
param = arcpy.Parameter(displayName="Destination Folder",
name="in_destination",
datatype="DEFolder",
direction="Input")
params = [param]
return params
def execute(self, parameters, messages):
#get the destination root folder parameter
#I have also tried using .valueAsText but it does not solve the problem
dest_root = parameters[0].value
#if the folder does not exist create it
if not os.path.exists(dest_root):
os.makedirs(dest_root)
#join path to store shapefiles to the root folder
curr_path = os.path.join(dest_root,"/Shapefiles")
#create folder to store shapefiles
if not os.path.exists(curr_path):
os.makedirs(curr_path)
#start doing a bunch of stuff to create shapefiles
El problema que estoy teniendo es que el parámetro de la carpeta que crea ArcGIS es una cadena de caracteres sin esconder, por lo que si quisiera utilizar el C:\Temp como mi raíz de destino la variable dest_root en la función de ejecución tendría un valor de 'c: \temp '. Esto está causando problemas para todas las llamadas a los métodos os porque (creo) están escapando los caracteres que vienen después de la barra invertida.
He intentado sustituir el carácter de la barra invertida por una barra inclinada haciendo esto:
dest_root = dest_root.replace("\\","/")
pero esto no resuelve el problema porque la organización en la que trabajo utiliza los números de identificación de los empleados para los nombres de usuario del perfil de Windows. Así que si quiero utilizar la carpeta Documentos para un destino los escapes están siendo tratados como códigos hexadecimales:
dest_root = "C:\Users\678910\Documents"
dest_root = dest_root.replace("\\","/")
#dest_root is now equal to "C:/Users78910/Documents"
¿Me he perdido algo básico aquí? Esto me ha estado volviendo loco toda la mañana.
0 votos
Esto no es realmente una pregunta GIS por sí mismo Así que probablemente sea más adecuado para StackOverflow .
0 votos
Creo que esta pregunta encaja en esta comunidad. Ya que este problema es con el procesamiento de parámetros de ArcGIS. Considera las rutas como cadenas y no las escapa.
1 votos
La razón por la que lo he publicado como una pregunta GIS es que creo que el problema está relacionado con el entorno python de ArcGIS.
0 votos
Sigue siendo muy específico del lenguaje python y de cómo maneja las cadenas. Ver: gis.stackexchange.com/questions/75019/ También, gis.stackexchange.com/questions/132508/
0 votos
Veo esto más como un problema de cómo ArcGIS ha implementado python mal, que es por lo que creo que pertenece aquí. Me encuentro con este tipo de problemas con ArcGIS con demasiada frecuencia cuando se trabaja con arcpy y tener este tipo de mensajes en el stackexchange GIS hace que la búsqueda de soluciones mucho más fácil.