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

3 投票
1 回答
4265 浏览
提问于 2025-04-21 04:06

我正在尝试在同一个脚本中使用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 个回答

4

你第一个例子肯定是行不通的。arcpy.ListFeatureClasses()这个函数有三个可选参数,而工作空间并不在其中,它必须提前定义好。具体的用法可以查看这个帮助页面

重置当前的工作空间其实没那么复杂。根据你使用的工作空间类型(文件夹、地理数据库、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()的详细信息。

撰写回答