You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FME PythonCaller中批量操作属性列(无需遍历要素)?

在FME PythonCaller中操作属性列集合的实现方案

你的两个需求都可以实现,核心是要在FeatureProcessor类中提前存储MYNEWATTR的所有值,因为close方法无法直接获取已输出要素的属性数据。以下是具体实现代码:

import fme
import fmeobjects

def my_python_func(my_new_attr_value):
    # 替换为你生成新属性的自定义逻辑
    if my_new_attr_value == "aucun":
        return "无匹配项"
    else:
        return f"包含标记: {my_new_attr_value}"

class FeatureProcessor(object):
    def __init__(self):
        # 初始化集合存储MYNEWATTR的唯一值(自动去重)
        self.my_new_attr_unique = set()

    def input(self, feature):        
        progs_dict = globals()[fme.macroValues['VARNAME_DICT']]
        all_prog_cols = list(progs_dict.keys())
        all_col_attributes = filter(
            lambda x: x in all_prog_cols,
            feature.getAllAttributeNames())
        value_tmp = map(str, map(feature.getAttribute, all_col_attributes))
        value = [i for i in value_tmp if i == 'X']
        if len(value) == 0:
            value = [progs_dict['aucun']]
        my_new_attr_val = ';'.join(value)
        feature.setAttribute('MYNEWATTR', my_new_attr_val)
        
        # 收集MYNEWATTR的值到集合
        self.my_new_attr_unique.add(my_new_attr_val)
        
        # 需求2:添加新属性(逻辑仅依赖当前要素值时,直接在此处理)
        another_attr_val = my_python_func(my_new_attr_val)
        feature.setAttribute('ANOTHERATTR', another_attr_val)
        
        self.pyoutput(feature)
        
    def close(self):
        # 需求1:打印MYNEWATTR的所有唯一值
        print("MYNEWATTR唯一值列表:", ', '.join(self.my_new_attr_unique))
        
        # 若新属性需依赖全局统计结果(如基于所有唯一值的计算)
        # 无法在close中修改已输出要素,建议拆分两个PythonCaller:
        # 1. 第一个收集值生成映射并存储为全局变量
        # 2. 第二个读取映射为要素添加新属性

关键说明:

  • 打印唯一值:通过类初始化时创建的集合,在input阶段自动收集并去重MYNEWATTR的值,close方法直接输出集合内容即可。
  • 批量添加新属性:
    • 若新属性仅依赖当前要素的MYNEWATTR值,直接在input阶段处理是最高效的方式。
    • 若必须基于全局统计结果生成新属性,需拆分流程:先通过一个PythonCaller收集值并生成映射,再用第二个PythonCaller读取映射为要素添加属性。

内容的提问来源于stack exchange,提问作者mazu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:37:27