arcpy.ListFeatureClasses()用于多个工作空间

时间:2014-09-11 18:05:44

标签: python gis arcpy

我正在尝试将arcpy.ListFeatureClasses()用于同一脚本中的多个工作区。通过其他示例脚本,我想我可以简单地将工作空间分配给变量,然后在arcpy.ListFeatureClasses()中使用该变量

例如:

workspace = "C:\\location\\"
fcs = arcpy.ListFeatureClasses(workspace)
for fc in fcs:
    print fc

但这会导致错误:

 TypeError: 'NoneType' object is not iterable

当我只对默认工作区中的要素类感兴趣时,我得到了arcpy.ListFeatureClasses(),如:

arcpy.env.workspace = "C:\\location\\"
fcs = arcpy.ListFeatureClasses()

但是我有兴趣为脚本的每一步查看不同的文件夹,我不想为每一步重置默认工作区。

此外,为什么我看到了其他人脚本中使用的第一个示例(包括我的GIS编程教授的脚本),他们似乎在这些实例中工作,但是我收到了错误。

感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:3)

你的第一个例子肯定不行。 arcpy.ListFeatureClasses()有3个可选参数,工作空间不是它们的一部分,必须事先定义它,请参阅函数的Help page以获得确切的语法。

重置当前工作区并不是一件大事。根据您使用的工作空间类型(文件夹,地理数据库,SDE,各种...)以及它们的结构(它们是否都位于同一位置?您是否有特定文件夹/数据库的列表?)您将首先列出它们,然后迭代工作区以列出它们的要素类:

# 1. List workspaces

listWS = [r"C:\DATA", r"D:\PROJECT\geodatabase.gdb", r"D:\whatever.mdb"]
# use this if the workspaces are in various locations

# or: 

arcpy.env.workspace = r"C:\DATA"
listWS = arcpy.ListWorkspaces()
# use this if the workspaces are in the same location

# 2. Iterate over the workspaces and list their feature classes

for ws is listWS:
 arcpy.env.workspace = ws
 listFC = arcpy.ListFeatureClasses()
 for fc in listFC:
  # do something

请参阅arcpy.ListWorkspaces() {{1}},了解如何将列表限制为某些类型的工作区或使用通配符。