最好使用Python或R在非常大的表中搜索记录,以便在FGDB中匹配功能?

最好使用Python或R在非常大的表中搜索记录,以便在FGDB中匹配功能?,python,arcpy,Python,Arcpy,编辑:我正在努力找到最好的解决方案,虽然我只熟悉Python,但我尝试做的事情不应该那么难或花那么长时间。我编辑了标题,询问使用R或其他程序的选项 我正在使用Python2.7在64位计算机上进行ArcGIS 10.1中的以下挑战 我有一个包含三个字段的表:ID#、“Revenue”和“Live”和2.1 百万张唱片。 我试图通过匹配fGDB的 在该表中,使用ID#命名,向FC添加两个字段,然后 用收入和实时数据值填充这些字段 我的脚本包括一层又一层for循环,if语句, 和搜索游标。虽然它在

编辑:我正在努力找到最好的解决方案,虽然我只熟悉Python,但我尝试做的事情不应该那么难或花那么长时间。我编辑了标题,询问使用R或其他程序的选项

我正在使用Python2.7在64位计算机上进行ArcGIS 10.1中的以下挑战

  • 我有一个包含三个字段的表:ID#、“Revenue”和“Live”和2.1 百万张唱片。

  • 我试图通过匹配fGDB的 在该表中,使用ID#命名,向FC添加两个字段,然后 用收入和实时数据值填充这些字段

  • 我的脚本包括一层又一层for循环,if语句, 和搜索游标。虽然它在一个小的测试批次中工作,但它是 永远与真实数据在一起,因为它正在搜索2.1 一百万张唱片

  • 我在下面加入了我的脚本,它可以工作,并且还显示了我的逻辑 流动,这是我需要指导的地方

将很长的记录列表与一组要素类进行比较/匹配时,最佳策略是什么?

import arcpy
import sys
import os

#Read through DBF. 
#For each record, locate it in fGDB and add fields REVENUE and LIVE

# Use searchCursor to find ID and REV value and LIVE value
#fc = #ID by the APR16ID

fields = ["APR16_ID","REVENUE", "LIVE"]

workspace = "C:\\FILE\\"
arcpy.env.workspace = workspace

#Table of values to append to each FC in the fGDB
table = "C:\\FILE\\FinalTest.gdb\\AUG_REV_BY_APRID" 

#DIRECTORYPATH = the fGDB that has the FeatureClasses that are to have data appended to them. 

directorypath = workspace + "DON_d2.gdb" 

#Use searchcursor to determine APR16_ID...

cursor = arcpy.da.SearchCursor(table, fields) 
for row in cursor:
        fc = str("don_d2_"+"{0}".format(row[0]))
        print fc
        RevVAL = str(row[1])
        print RevVAL
        LiveVAL = str(row[2])
        print LiveVAL

        for dirpath, dirnames, fgdb in arcpy.da.Walk(directorypath,
                                                     datatype="FeatureClass",
                                                     type="Polygon"):
            for donut in fgdb:
                if str(donut)==str(fc):
                    print donut + " : this is the same as " + fc

                    ##Append data to donuts_d2
                    d2_fc = workspace+"DON_d2.gdb\\"+fc
                    arcpy.AddField_management(d2_fc, "REVENUE", "FLOAT")
                    arcpy.AddField_management(d2_fc, "LIVE", "FLOAT")
                    arcpy.GetMessages()

                    #new SearchCursor for that feature
                    dons = arcpy.UpdateCursor(d2_fc, fields)
                    for don in dons:
                        don.setValue("REVENUE",RevVAL)
                        don.setValue("LIVE",LiveVAL)
                        dons.updateRow(don)
                        arcpy.GetMessages()
                else:
                    pass 

如果您有访问权限,请始终使用数据访问模块。除非您正在调试,否则不需要所有这些打印语句。此外,您正在对str()进行一些不必要的强制转换。Paul是正确的,210万个字符串强制转换和比较是不必要的,如果您在程序中实际实现了这一点,则会大大降低程序的速度。然而,这不是这里的主要问题。主要问题是您正在解析210万条记录,远远超过了解决此问题所需的数量。在地理信息系统方面,您几乎无法改进这里正在发生的事情。您需要的是一个高效的搜索/排序算法来执行这个庞大的表解析。这意味着这个问题更适合于堆栈溢出。@Paul-这是很好的输入,谢谢。你能指出不必要的str()吗?我很难让第一个SearchCursors工作并生成变量RevVAL和LiveVAL,str(row[1])方法似乎是唯一的解决方案。我很感谢你的更正,因为我的其他研究没有把正确的语法弄清楚。@Conor-谢谢你,如果你或其他人能告诉我怎么做的话,我很乐意将这个问题转移到堆栈溢出(或者我只是复制并粘贴它…),至少,
fc=str(“don_d2_u2;”+“{0}”。format(row[0])
是一个奇怪的实现。尝试
“don\u d2{0}”。格式化(行[0])
。稍后您将再次将fc转换为字符串。