如何从一个Bonobo转换中发送出一个名为namedtuple的行?因此,在接收转换中,我可以对行数据进行字段级访问。
我现在使用字典在两次转换之间发送数据。但是它们有一个缺点:它们是易变的(如果您忘记在转换的输出中创建一个新的变量,可能会发生坏事情)。
我认为,简单地将一个字典替换为一个namedtuple就能解决问题,但是显然Bonobo不支持发送一个namedtuple。我读了一些有关context.set_output_fields [keys list]的内容,但不知道如何使用它。一个小例子就好了!
答案 0 :(得分: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(...)
方法仅在出于某种原因而不希望使用命名数据结构(例如namedtuple)但更喜欢使用元组而又需要在元组中命名值的情况下有用。
希望有帮助!