修复在属性值为Null时的If/Else循环与UpdateCursor
我有一个Python脚本,用来批量更新GIS中的数据库。
我使用更新游标(Update Cursors)来更新属性表中的值,这在我第一次更新记录时非常顺利,因为更新游标会覆盖数据(这是我作为一个还算新手的程序员所理解的)。
当我再次查看某条记录,需要在已有记录中添加(或附加)评论时,我可以用两段不同的代码来实现,但这样做有点笨拙,还需要额外的步骤。我想把这两段代码合并成一个带有嵌套if/else循环的脚本。
为了覆盖空白属性,这段代码运行得很好。
fc=DB
fieldname=["StationID","StationStatus","StatusComments_Source"]
for i in confirm:
with arcpy.da.UpdateCursor(fc,fieldname) as cursor:
for row in cursor:
if (row[0]== i):
row[1]= "Confirm" #Data Confirmed
row[2]= StatusComments_Source #Comments
cursor.updateRow(row)
如果我想在现有字段中附加评论,这段代码也能正常工作。不过,如果第二行的属性字段是空的,这段代码就会出错。
for i in confirm:
with arcpy.da.UpdateCursor(fc,fieldname) as cursor:
for row in cursor:
if (row[0]== i):
row[1]= "Confirm" #Data Confirmed
confcom=[]
confcom.append(StatusComments_Source)
row[2]=''.join(confcom)
cursor.updateRow(row)
这是我尝试创建的循环:“如果第二行是空的,就覆盖数据,否则:附加评论”。
for i in confirm:
with arcpy.da.UpdateCursor(fc,fieldname) as cursor:
for row in cursor:
if (row[0]== i):
row[1]= "Confirm" #Data Confirmed
if row[2] is None:
row[2] = StatusComments_Source
else:
confcom=[]
confcom.append(row[2],", ")
confcom.append(StatusComments_Source)
row[2]=''.join(confcom)
cursor.updateRow(row)
但是我遇到了这个错误:
Traceback (most recent call last):
File "C:\Users\CEI2\AppData\Local\Temp\ipykernel_19768\350652596.py", line 13, in <cell line: 4>
confcom.append(row[2],", ")
TypeError: list.append() takes exactly one argument (2 given)
我会很感激任何帮助!!
1 个回答
0
如果你有一个已经用逗号分隔的字段,想要在里面添加一个新项目,可以先用 split()
把它分开成一个列表,然后把新项目加到这个列表里,最后再把列表合并成一个字符串,重新赋值回去。
if row[2] is None:
row[2] = StatusComments_Source
else:
confcom=row[2].split(', ')
confcom.append(StatusComments_Source)
row[2]=', '.join(confcom)
你也可以直接用字符串拼接的方法来做:
row[2] += f', {StatusComments_Source}'