我正在尝试将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编程教授的脚本),他们似乎在这些实例中工作,但是我收到了错误。
感谢您提供任何帮助或建议。
答案 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}},了解如何将列表限制为某些类型的工作区或使用通配符。