我试图通过文件夹迭代空间连接 - 然后通过第一个空间连接的输出迭代第二个空间连接。
这是我的初始脚本:
{{1}}
我一直收到Error00732:目标功能:数据集C不存在或不受支持。
我确定这是一个简单的错误,但之前建议解决此错误的解决方案都不允许我将结果输出到自己的文件夹中。
提前感谢任何建议
答案 0 :(得分:0)
您似乎试图遍历给定目录,在其中包含的(shapefile)上执行空间连接。
但是,这种语法是一个问题:
input = "C:\\Users\\Ryck\\Test\\test_Input"
for fc in input:
# do things to fc
在这种情况下,for
循环为iterating over a string。因此,每次循环时,一次只需要一个字符:首先是C
,然后是:
,然后是\
...当然,arcpy函数会因此输入而失败,因为它需要一个文件路径,而不是一个字符。因此错误:目标特征:数据集C不存在......
要在输入目录中循环文件,您需要额外的几个步骤。 Build a list of files,然后遍历该列表。
arcpy.env.workspace = input # sets "workspace" to input directory, for next tool
shp_list = arcpy.ListFiles("*.shp") # list of all shapefiles in workspace
for fc in shp_list:
# do things to fc
(GIS.SE上的参考this answer。)
答案 1 :(得分:0)
经过一些纠结,并且由于@erica的建议,我决定放弃我原来的嵌套for循环概念,并且更简单地处理。我仍然在创建一个GUI,它将创建可以分配给变量的系统参数,然后用作空间连接的参数,但是现在,这是我已经解决的解决方案。
import arcpy
input = "C:\\Users\\Ryck\\Test\\test_Input\\"
boundary = "C:\\Users\\Ryck\\Test\\area_Input\\boundary_Test.shp"
outloc = "C:\\Users\\ryck\\Test\\join_01"
admin = "C:\\Users\\Ryck\\Test\\area_Input\\admin_boundary_Test.shp"
outloc1 = "C:\\Users\\Ryck\\Test\\join_02"
arcpy.env.workspace = input
arcpy.env.overwriteOutput = True
shp_list = arcpy.ListFeatureClasses()
print shp_list
for fc in shp_list:
join1 =
arcpy.SpatialJoin_analysis(fc,boundary,"C:\\Users\\ryck\\Test\\join_01\\" +
fc)
arcpy.env.workspace = outloc
fc_list = arcpy.ListFeatureClasses()
print fc_list
for fc in fc_list:
arcpy.SpatialJoin_analysis(fc,admin,"C:\\Users\\ryck\\Test\\join_02\\" +
fc)
设置多个环境并使用实际路径感觉很笨,但此时它对我有用。