启发Python新手?我试图对一组文件执行大量缓冲区分析。我试图使它成为多段线和多点文件被选择为缓冲区。到目前为止,我已经准备好并描述了这些文件,因此我知道要选择哪些文件,但是对于如何让python只获取多段线和多点,有什么见解吗
import arcpy
arcpy.env.overwriteOutput = True
path = "Insert file folder path names here"
arcpy.env.workspace = z = path
allfc = []
for a,b,c in arcpy.da.Walk(x):
for d in c:
allfc.append(a+'/'+d)
print allfc
for fc in allfc:
d = arcpy.Describe(fc)
print "\n" + "\n"
print d.basename
print d.shapeType
print "\n"
for fc in allfic:
if d.shapeType == "Polyline":
d = "300 Meters"
else d.shapeType == "Multipoint":
d = "500 Meters"
arcpy.Buffer_analysis(fc, fc+"_BUF", d, "FULL", "ROUND", "ALL")
这是给我带来悲伤的最后一部分,我知道我肯定错过了一些显而易见的东西
有几种不同的方法可以处理逻辑如何通过这个过程结束,通过实验看看是否可以找到其他方法来解决它可能是有用的。但是,以下是我对代码哪里出错以及如何改进的建议
通常,描述性变量名称越多越好。当然,
dist
或desc
的键入时间要比d
长,但您使用d
实现了我在脚本中看到的三个独特功能,这导致了最后for
循环中的一些问题在最后一个循环中,您通过
allfic
而不是allfc
进行循环,但这只是一个输入错误。但即使你解决了这个问题您将在
for fc in allfc
中循环两次。这意味着您可以一直循环allfc
,然后以d
作为循环中最后一个要素类的Describe
对象。假设它是一条多段线。然后从一开始再次循环allfc
,并且d.shapeType == "Polyline"
为真(即使循环中的第一个要素类实际上是多边形)。因此,循环尽职尽责地将d
设置为300 Meters
,然后执行缓冲区操作。然后循环转到第二个要素类,但是d
现在是一个字符串(300 Meters
),而不是一个描述对象,因此对于列表中的其余要素类将永远无法正常工作在检查它是否是多点时,应该使用
elif
(“else-if”)而不是else
。实际上,您可以只使用if
,但是如果您在else
区域中,您只希望跳过要素类,因此可以不使用它最后:
allfc
中的每个fc
都将通过Buffer
工具发送。(只有多段线和多点可以设置缓冲区距离,但每个要素类都会尝试执行该操作。如果是多边形而不是多段线,则只需使用上次通过循环时的距离!)因此您也需要将该操作置于条件内相关问题 更多 >
编程相关推荐