arcpy查询不起作用
我有一个ArcPy脚本,目的是根据一个查询从属性表中选择想要的属性(包括 E-dom
和 E-subdom
,下面有例子)。
myQuery = '"VM_POLY" = \'E-dom\'' or '"VM_POLY" = \'E-subdom\''
myInputShapeFile = r"D:\FieldStudy.shp"
myOutputShapefile = r"D:\Endangered.shp"
arcpy.Select_analysis(myInputShapeFile, myOutputShapefile, myQuery)
当脚本运行完毕后,查询中只选中了一个类型的属性。在 myInputShapeFile
的属性表中,既有 E-dom
也有 E-subdom
属性,但脚本只会在 myOutputShapefile
中返回 E-dom
。我知道问题可能出在查询(myQuery
)上,但我不太确定该怎么解决。
如果有人能提供一些指导,我将非常感激。
4 个回答
1
我会用一些特殊符号来简化你的查询。
myQuery = ' "%s" = %s or "%s" = %s ' %('VM_POLY','E-dom','VM_POLY','E-subdom')
我知道一开始看起来有点奇怪,但这是确保你的单引号和双引号放置正确的一种好方法,特别是对于那些需要特定格式的内容。最近它们对我来说变得非常重要。
注意:如果你想在字符串中插入数字,可以用 %d 来代替 %s。
1
在Python中,字符串格式化(还有SQL中的“IN”操作符)让处理复杂的引号语法变得(稍微)简单一些:
myQuery = "\"{}\" IN ('{}', '{}')".format("VM_POLY", "E-dom", "E-subdom")
1
试试这个:
myQuery = '"VM_POLY" = "E-dom" or "VM_POLY"= "E-subdom"'
之前提到过,你的 or
操作符处理得不太对,因为它没有放在引号里面。你还用了一个 转义字符 \
,这可能是多余的。你是想解决 or
操作符暴露在外的问题,导致它不属于 SQL 查询,而是被 Python 解释器识别了。
2
你是不是把撇号用错了?
myQuery = '"VM_POLY" = \'E-dom\'' or '"VM_POLY" = \'E-subdom\''
# ^ ¨ ¨^ ^ ¨ ¨^
(用^
标记的撇号表示一个Python字符串;用¨
标记的撇号是转义的,所以它们是字符串的一部分。)
我想你的查询应该是:
myQuery = '"VM_POLY" = \'E-dom\' or "VM_POLY" = \'E-subdom\''
# ^ ¨ ¨ ¨ ¨^
因为or
不应该被Python当作逻辑运算符来处理(它是作用于两个字符串的),而应该作为查询文本的一部分。