斯潘8
第4排
你好,
我正在使用LineJoiner来减少街道地图中的分段数。每个段可以有一个起始地址和结束地址,所以在连接线之后,我有一个段的Froms和Tos列表。我想用python处理这个列表。
我正在研究它,并学习使用下面的pythoncaller函数处理列表:
导入fmeimport fmeobjectsdef processfeature(feature):nn=feature.getattribute(“全名”),如果nn='john a macdonald rd':打印nn,addr=feature.getattribute(“c:\gis\sk\saskatoon\roads\roads.sl3.from_address”)try:if len(addr)>0:print len(addr),[x代表x in addr,如果x不是none]除了:打印“Nothing”
我还公开了列表的属性,所以我可以在检查员那里手动检查它们。
我发现如果我有一个以空开头的列表,len函数就会抛出一个异常,这意味着,如果列表中的第一个项为空,getattribute函数将返回一个空值,而不是列表开头有一个非对象的列表。
有人能提出解决办法吗?
您好!MARCP,请fmefeature.getattribute(
)方法返回包含字符串元素的列表,而且每一个
然而,如果第一个元素是
如果你能治疗
或者如果你需要保存
import redef processfeature(feature):maxindex=-1 for attr in feature.getAllattributeNames():m=re.match('^(\d+)\ \.from$',attr)如果m:i=int(m.group(1)),如果maxindex<i:maxindex=i,如果maxindex<0:print(''list.from不存在')否则:对于范围内的i(maxindex+1):attr=''u list%d。从''%i is ull,遗失,t=feature.getattributeNullMissingandType(attr)(如果为空):从商店打印('\%d.'%i)elif ismissing:打印(''u list%d.from is '%i)否则:value=feature.getattribute(attr)print(''u list%d。从存储\'%s''(i,价值)
注:此脚本可应用于FME 2014 SP1或更高版本。
您好!高桥,请你是对的,我的情况是一个以缺失值开头的列表。
基于您的示例,我创建了以下内容,这些内容在我的场景中非常有效。这不需要nullattributemapper,但是依赖于这样一个事实,即属性总是有值的,在这种情况下,索引。
def processfeature(feature):nn=feature.getattribute('full_name')if nn='bedford rd':pieces=len(feature.getattribute('c:\gis\sk\saskatoon\roads\roads.sl3.road_id'))打印nn,件,对于范围内的i(个):打印“%d:”%i,尝试:attr='c:\gis\sk\saskatoon\roads\roads.sl3%d。从地址“%i is ull,遗失,t=feature.getattributeNullMissingandType(attr)(如果不是(isNull或isMissing):打印feature.getattribute(attr),其他:打印'',除了:打印“”,我,“},打印“”。
我不得不说我不理解你的代码的第一部分,您只是确认列表属性确实存在吗?
谢谢,
在列表属性上调用feature.getattribute()时,它将假定您的列表以元素0开头,并且它按顺序递增,没有间隙。这意味着这个列表是可以的:
地址0='A'
ADDR { 1 }=“B”
地址2='C'
但该列表不被FME视为有效列表(不以0开头)。而feature.getattribute()将返回一个none实例,就像它根本不存在一样:
ADDR { 1 }=“A”
地址2='B'
ADDR { 3 }=“C”
此列表将导致feature.getattribute()只返回前两个元素,由于编号中存在间隙:
地址0='A'
ADDR { 1 }=“B”
ADDR { 3 }=“C”
如果您的list属性以非零索引开始,并且/或者您的数字有缺口,那么可能会发生这种情况,您必须首先修复这个问题,或者执行一些regex魔法(请参阅下面的高桥解答)来手动提取列表。
将fme list属性提取到python列表中后,然后,您可以做一个简单的检查,看看是否有一个包含一些元素的列表,这样地:
如果addr:print“fme list”addr存在并且至少有一个元素“else:print”fme list“addr”不存在或为空
同意。更详细地说,似乎getattribute方法从连续索引序列中收集列表元素,如果指定了列表名称,则该索引序列以0开头。用这个实验脚本:
def processfeature(feature):l=feature.getattribute('')如果l==none:print('列表不存在或缺少第一个元素')否则:print(l)
如果源功能中可能缺少“发件人地址”属性,所有病例1例,2个,可能会发生3次。因此,我认为最好事先用nullattributemapper解决“丢失”的情况。
还有一件事,如果您有这样的列表:
地址0。从地址='A'地址1。从地址='B'地址1到地址='C'
在python中执行以下操作:
feature.getattribute('addr.to_address')
这将返回的单个实例没有,请而不是清单[没有,'C'],请这是你所期望的(希望)。
我认为这是不幸的。这可以通过实现以下想法来避免:https://knowledge.亚搏在线safe.com/content/idea/21655/fmeobjects-support-for-complex-lists.html
所以每个读到这个的人,请投赞成票:—)
?2019安全亚搏在线软件公司|合法的