问题描述
这只是我所拥有的一小部分。最终,我正在检查 Esri 地理数据库中的 2 种类型的 RBJ 表。如果表不存在,我想将地理数据库的名称附加到新列表中。
我创建了一个名为 missing_rbj 的新空列表。我需要代码来检查是否有 RBJ 表,执行所需的附加到 CSV,如果出现错误(因为没有 RBJ 表),然后将 aoi_name 附加到列表中。当我在最后打印列表时,即使多个项目被标记为 No RBJ Exists,它也会返回空。对于更多背景,此尝试除了在 for 循环内,其中 x 是地理数据库的路径。我将 aoi_name 定义为从原始路径拆分的 gdb 名称。
missing_rbj = []
aoi_name = x.split("\\")[-1]
aoi_name = aoi_name.replace(".gdb","")
try:
ses_table = r'{0}\GDB_REVSESSIONTABLE'.format(x)
ses_ids = {}
with arcpy.da.SearchCursor(ses_table,['SESSIONID','USERNAME']) as ses_cursor:
for row in ses_cursor:
ses_ids[row[0]] = row[1]
# REVCHECKRUNTABLE
rev_table = os.path.join(x,"REVCHECKRUNTABLE")
if arcpy.Exists(rev_table):
rev_data = []
rev_table_headers = ['SESSIONID','RECORDID','BATCHJOBDATETIME','BATCHJOBGROUPNAME','CHECKNAME','CHECKTITLE','CHECKruncONTEXT','RESOURCENAME','TOTALVALIDATED','TOTALRESULTS']
with arcpy.da.SearchCursor(rev_table,rev_table_headers) as rev_cursor:
for row in rev_cursor:
csv_write = []
analyst = ses_ids[row[0]]
for x in row:
csv_write.append(x)
csv_write.append(aoi_name)
csv_write.append(analyst[:2].upper())
csv_write.append(datetime.datetime.Now())
rev_data.append(csv_write)
with open(rbj_revcheck_csv,'ab') as f:
wr = csv.writer(f)
for h in rev_data:
wr.writerow(h)
# REVTABLEMAIN
rev_main = r'{0}\REVTABLEMAIN'.format(x)
if arcpy.Exists(rev_main):
flds = [t.name for t in arcpy.ListFields(rev_main)]
rev_data = []
with arcpy.da.SearchCursor(rev_main,flds) as main_cursor:
for row in main_cursor:
csv_write = []
for i in row:
csv_write.append(i)
csv_write.append(aoi_name)
csv_write.append(analyst[:2].upper())
csv_write.append(datetime.datetime.Now())
rev_data.append(csv_write)
with open(rbj_revmain_csv,'ab') as f:
wr = csv.writer(f)
for h in rev_data:
wr.writerow(h)
print "RBJ Good!\n"
except:
missing_rbj.append(aoi_name)
print "No RBJ Exists in GDB.\n"
任何帮助将不胜感激!我有一种感觉,这是我多次忽略的事情。这是一个相当长的项目!
解决方法
好吧,就像我说的那样,这绝对是我忽略的东西。我忘记了,因为空列表在 for 循环中,在 for 循环完成后它将不再存在。我将 missing_rbj 移到了循环之外,它奏效了!