应用在父文件夹内的文件夹上运行的脚本

时间:2018-07-10 14:16:28

标签: python

我有一个在文件夹上运行的脚本,用于创建轮廓线。由于我大约需要处理2700 DEM,因此我需要一种使用脚本在父文件夹内的所有文件夹上运行并将其保存到输出文件夹的方法。我不确定如何编写此脚本,但如果能得到一些指导,将不胜感激。

以下是我目前拥有的脚本,该脚本可在单个文件夹中使用。

import arcpy
from arcpy import env
from arcpy.sa import *

env.workspace = "C:/DATA/ScriptTesting/test"

inRaster = "1km17670"
contourInterval = 5
baseContour = 0
outContours = "C:/DATA/ScriptTesting/test/output/contours5.shp"

arcpy.CheckOutExtension("Spatial")

Contour(inRaster,outContours, contourInterval, baseContour)

2 个答案:

答案 0 :(得分:0)

您可能正在寻找os.walk(),它可以递归地遍历给定目录的所有子目录。您既可以使用当前工作目录,也可以计算自己的父文件夹,然后从那里开始,或者其他任何操作-但它会为您提供文件名,而不是文件名。从那里,您可以创建一个子例程来确定是否对该文件执行脚本。

答案 1 :(得分:0)

您可以像这样获得所有目录的列表:

import arcpy
from arcpy import env
from arcpy.sa import *

import os

# pass in your root directory here
directories = os.listdir(root_dir)

然后您可以遍历这个目录:

for directory in directories:
    # I assume you want the workspace attribute set to the subfolders
    env.workspace = os.path.realpath(directory)

    inRaster = "1km17670"
    contourInterval = 5
    baseContour = 0

    # here you need to adjust the outputfile name if there is a file for every subdir
    outContours = "C:/DATA/ScriptTesting/test/output/contours5.shp"

    arcpy.CheckOutExtension("Spatial")

    Contour(inRaster,outContours, contourInterval, baseContour)

如@ a625993所述,如果您具有递归嵌套的目录,os.walk也可能很有用。但是,从您的问题中可以看出,您只有单个子目录,这些子目录直接包含文件,而没有其他目录。这就是为什么只列出根目录下的目录就足够了。