微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 arcpy

如何解决在 arcpy

我正在尝试编写一个包含逻辑查询的 python 命令。我有一系列的表和层,当两个共享变量具有相同的值时,我想对它们运行一个命令。我创建了这些表和层的列表:

pattern = '*Assess*.dbf'
files = []
tables = []
layernames = []
## create the loop element
for dirpath,dirnames,filenames in arcpy.da.Walk(inputFolder):
    # append shapefile path to list
    for filename in fnmatch.filter(filenames,pattern):
        files.append(os.path.join(dirpath,filename))

tables = arcpy.ListTables()

for file in files:
    names.append("\"TOWN_ID\" = " + str(int(os.path.basename(file).rstrip(os.path.splitext(file)[1])[1:4])))
    layernames.append(str(int(os.path.basename(file).rstrip(os.path.splitext(file)[1])[1:4])))

代码如下:

for layername,table in zip(layernames,tables):
    #print layername
    #print table
    #CF_QueryTool = "C:\\ArcGIS_Temp\\parcel_mosaic\\land_parcels_mosaic.gdb\\cf_QueryTool"
    tablelist = [table,"TaxParcels_Layer.{}".format(layername)]
    wherecluase = "TaxParcels_Layer.{}.LOC_ID = table.LOC_ID".format(layername)
    print tablelist
    print wherecluase
    arcpy.MakeQueryTable_management(tablelist,"QueryTable.{}".format(layername),"ADD_VIRTUAL_KEY_FIELD","",wherecluase)
    print "QueryTable.{} created".format(layername)

问题是,显然我的 wherecluase 有问题,这让我怀疑我是否可以使用表列表来使用类似 table.Locid 的东西。如果我在这里犯了错误,请告诉我。非常感谢!

解决方法

由于“表”既是 SQL 保留关键字,又是文件地理数据库 (*.gdb) 中的无效名称,因此我假设您需要 SQL WHERE 子句中变量 table 的值,而不是单词“桌子。”您需要在 whereclause 格式中添加另一个参数说明符:

>>> table = "myTable"
>>> layername = "myLayer"
>>> 
>>> # original code
>>> whereclause = "TaxParcels_Layer.{}.LOC_ID = table.LOC_ID".format(layername)
>>> print(whereclause)
TaxParcels_Layer.myLayer.LOC_ID = table.LOC_ID
>>> 
>>> # modified code
>>> whereclause = "TaxParcels_Layer.{}.LOC_ID = {}.LOC_ID".format(layername,table)
>>> print(whereclause)
TaxParcels_Layer.myLayer.LOC_ID = myTable.LOC_ID
>>> 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。