我正在尝试Bonobo,获取dict格式的数据源,然后写入CSV文件。在
然而,当我向bononbo.csv撰稿人,结果是一个包含以字符串表示的dict的单个字段。在
可以使用转换脚本进行复制:
graph = bonobo.Graph(
bonobo.LdjsonReader('test.jsonl'),
bonobo.CsvWriter('test.csv'),
)
同样,显式地使用dict也会得到相同的结果:
^{pr2}$
上述结果将是
{'header': 'test'}
而不是预期的
header
test
Tags:
TL;DR
使用倭黑猩猩。打开物品(0)中间节点。
为什么会这样?
在通信阶段,图节点的输入/输出总是规范化为某种元组(也就是让节点说话的队列)。
当您生成一个dict时,它被规范化为这个dict的一项元组(yield{}相当于yield({},),在bonobo图执行上下文中)。
然后编写器将使用dict-in-a-tuple输入编写字符串表示。因此你的结果。
倭黑猩猩。打开物品(…)
UnpackItems(…)节点将从其输入流元素中获取一些参数并“解包”它们(将arg的内容转换为输出元组中的顶级值)。dict键将用于使它成为一个类似namedtuple的对象,保留必要的头以备以后写入。
参数是您对解包感兴趣的项的“索引”。例如,给定这个输入行:({“foo”:1},{“bar”:2},{“baz”:3}),如果您通过unpacketimes(0,2)节点传递它,则会得到(foo=1,bar=3)作为输出(最后一个符号是meta,它是namedtuple类型)。
引用应该位于http://docs.bonobo-project.org/en/develop/reference/api/bonobo/nodes.html#bonobo.nodes.UnpackItems,但我同意它现在有点缺少细节。
相关问题 更多 >
编程相关推荐