我试图通过将一个字段中的地址方向转移到另一个字段来修改表。让我们说";地址";所述表的字段是";123 Fake Street S";我只需要将S转移到一个称为"S"的字段中;strtDirect";。但是,有些地址没有关联的方向。所以我现在的代码如下:[计算字段工具中的代码][1][1]:https://i.stack.imgur.com/GSfsg.jpg
(图片会给出更好的图片(:所以这个代码将方向转移到正确的字段,但当它到达一个没有方向的地址时,字段就会停止填充。我想我需要一个if语句。任何想法都将不胜感激。我对此很陌生。
def GetStrtDirect(strtAddress):
aList = strtAddress.split(" ")
return aList[3]
您可能想要这样的东西:
DIRECTIONS = ['N', 'E', 'S', 'W']
def get_strt_direct(strt_address):
return (
None
if (not strt_address) or (dir := strt_address.split()[-1]) not in DIRECTIONS
else dir
)
这确保了如果strt_address
为空,或者如果它没有以给定方向之一结束,则结果为None
。我假设这里只有4个,但当然您可能需要添加'NW'
、'SE'
等,甚至可能添加'East'
等。在这种情况下,您可能需要检查strtAddress.split()[-1].lower()
是否不在该值中,并返回原始值。
strt_address.split()[-1]
在空白上拆分strt_address
,然后取最后一个(dir := ..)
将结果分配给dir
,但也评估结果以进行比较
具有建议更改的解决方案:
DIRECTIONS = ['N', 'E', 'S', 'W', 'North', 'East', 'South', 'West']
def get_strt_direct(strt_address):
return (
None
if (not strt_address) or strt_address.split()[-1].lower() not in DIRECTIONS
else strt_address.split()[-1]
)
如果您有一个地址即字符串字段/值,您将不得不编写一段相当复杂的代码来提取值,是的。在你的例子中;123 Fake Street S";,街道名称由两个单词组成,但也可能是一个。。。或者三个?所以,是的,你肯定会得到很多条件句。因此,如果可能的话,我会尝试让这个字符串使用一些特殊的字符来分隔重要值。像","或"|"。以便您可以在拆分中使用这些值,例如
street_number,street_name,street_direction=str_val.split(','(
这将解构一个字符串,比如";123|假大街|S";,分为3个变量。
"21 Main St";,自然会变成";21,Main St,";。如果您的数据包括城镇/锡蒂/邮政编码,您将继续使用该约定
否则你"如果";将很快变得难以管理。在数据中添加至少一些格式约定将有助于