2

如何从一个 Bonobo 转换中以 namedtuple 形式发送一行?因此,在接收转换中,我可以对行数据进行字段级访问。

我现在使用 dicts 在转换之间发送数据。但是它们有一个缺点:它们是可变的(如果您忘记在转换输出处创建一个新的,则可能会发生坏事)。

我认为简单地用一个命名元组替换一个字典就可以了,但显然 Bonobo 不支持发送一个命名元组。我读了一些关于 context.set_output_fields[list of keys]) 的内容,但不知道如何使用它。一个小例子会很棒!

4

1 回答 1

0

使用 namedtuple 非常简单,您可以生成一个 namedtuple 实例并将其扩展为下一个转换输入:

import bonobo
import collections

Hero = collections.namedtuple("Hero", ["name", "power"])


def produce():
    yield Hero(name="Road Runner", power="speed")
    yield Hero(name="Wile E. Coyote", power="traps")
    yield Hero(name="Guido", power="dutch")


def consume(name, power):
    print(name, "has", power, "power")


def get_graph():
    graph = bonobo.Graph()
    graph >> produce >> consume
    return graph


if __name__ == "__main__":
    with bonobo.parse_args() as options:
        bonobo.run(get_graph())

的“输出字段”produce()将从命名元组字段中设置,“输入字段”consume(...)将从第一个输入行中检测。

context.set_output_fields(...)方法仅在出于某种原因不想使用命名数据结构(如命名元组)但更喜欢使用元组但需要命名元组中的值时才有用。

希望有帮助!

于 2019-06-06T11:46:12.473 回答