最好使用Python或R在非常大的表中搜索记录,以便在FGDB中匹配功能?
编辑:我正在努力找到最好的解决方案,虽然我只熟悉Python,但我尝试做的事情不应该那么难或花那么长时间。我编辑了标题,询问使用R或其他程序的选项 我正在使用Python2.7在64位计算机上进行ArcGIS 10.1中的以下挑战最好使用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语句, 和搜索游标。虽然它在
- 我有一个包含三个字段的表: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转换为字符串。