7 votos

Utilice el elemento de la lista para construir nuevo camino

Actualmente estoy tratando de construir dos listas contienen nombres de carpeta, con el fin de utilizar sus elementos para las herramientas de geoprocesamiento más tarde. Sin embargo yo lucho con la creación de las listas. Estoy usando ArcGIS 10.3 (Python 2.7).

Lo que necesito:

C:\test contiene varias subcarpetas que me gustaría poner en la primera lista, es decir, C:\test\test1, C:\test\test2, etc. El primer conjunto de subcarpetas que contiene otro conjunto, es decir, C:\test\test1\xy1, C:\test\test1\xy2 etc. Lo que necesito es una lista con los nombres, no los caminos, para cada uno de los primeros a nivel de subcarpetas como en firstlevelList = [test1, test2, test3] y secondlevelList = [xy1, xy2, xy3]. Luego quiero usar el arcpy.MosaicToNewRaster_management función de procesar los datos en cada uno de los secondlevelList por separado (una especie de acuerdo a esta pregunta).

Lo que he intentado:

import arcpy, os

workspace = r"C:\test"
arcpy.env.workspace = workspace
arcpy.env.scratchworkspace = workspace
arcpy.env.overwriteOutput = True


firstlevelList = []
firstlevelList.append(os.listdir(workspace))
## up to here, everything works very well, the list contains all the available subfolders in my workspace.

secondlevelList = []
for element in firstlevelList:
    newPath = """{0}\{1}""".format(workspace, element)
    secondlevelList.append(os.listdir(newPath))

## This creates the following error:
##Runtime error
##Traceback (most recent call last):
##  File "<string>", line 8, in <module>
##WindowsError: [Error 3] Das System kann den angegebenen Pfad nicht finden: "C:\\Users\\sutter\\Desktop\\GIS_temp\\test\\['test1', 'test2', 'test3']/*.*"

Entiendo que al parecer no puedo utilizar un elemento de la lista para crear un nuevo camino? También se trató siguiente, que trabajó para uno de los elementos de la fistlevelList (), pero no para todos ellos... :

secondlevelList = []
i = 0
for element in firstlevelList:
     newPath = """{0}\{1}""".format(workspace, element[i])
     secondlevelList.append(os.listdir(newPath))
     i += 1

Estoy utilizando el os.listdir función de la manera equivocada? Mi conocimiento acerca de la os.path / os.walk funciones es bastante limitado, pero supongo que también podrían ayudar? Sería mejor usar el arcpy.ListFiles() a la función?

El objetivo de la secuencia de comandos: Por último, me gustaría crear un mosaico para todos los rásteres en el secondlevelList por separado. Ejemplo: carpeta C:\test\test1\xy1 contiene 3 rásteres. Ellos necesitan ser mosaiced. A continuación, la siguiente carpeta debe ser procesada C:\test\test1\xy2 etc. Escribí este código para hacer esto:

for tile in firstlevelList:
    for run in secondlevelList:
        zeitschrittRaster = arcpy.ListRasters("*", "TIF")
        arcpy.MosaicToNewRaster_management(zeitschrittRaster, Sammelordner, """{0}.tif""".format(run), "", "32_BIT_FLOAT", 10, 1, "MAXIMUM", "FIRST")

7voto

Spyros Puntos 56

Hay dedicado lista de funciones en arcpy y me gustaría usarlos en lugar de los python os.listdir función de:

import arcpy, os

workspace = r"C:\test"
arcpy.env.workspace = workspace
arcpy.env.scratchworkspace = workspace
arcpy.env.overwriteOutput = True

firstlevelList = arcpy.ListWorkspaces(workspace_type = "Folder")

for element in firstlevelList:
    arcpy.env.workspace = element
    secondlevelList = arcpy.ListFiles()
    for file in secondlevelList:
        # do something

file representa el archivo en sí mismo a pesar de que si usted la impresión de que sólo obtendrá su nombre. Puede ingresar a la herramienta sin tener que volver a crear la ruta de acceso completa al archivo. Sin embargo, si usted desea hacer esto, por alguna razón, añade esta línea en los últimos for bloque de:

path_to_file = os.path.join(ws, file)

Dependiendo del tipo de los archivos (los rásteres?) y lo que quieres hacer con ellos, otra función de lista podría ser más apropiada:

Ver también la página de ayuda de arcpy.ListWorkspaces() y arcpy.ListFiles().

1voto

Anton8000 Puntos 165

Tal vez esto puede ayudarle a: el Uso de Python para ejecutar la combinación de los rásteres

He utilizado sistema operativo.ruta de acceso.únete y os.a pie (os ruta)

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: