我正在尝试Bonobo,获取dict格式的数据源,然后写入CSV文件。
但是,当我向bononbo.CsvWriter生成一个dict时,结果是一个包含dict的单个字段,该字段表示为一个字符串。
这可以使用转换脚本进行复制:
graph = bonobo.Graph(
bonobo.LdjsonReader('test.jsonl'),
bonobo.CsvWriter('test.csv'),
)同样,显式使用dict也会产生相同的结果:
graph = bonobo.Graph(
lambda: {'header': 'test'},
bonobo.CsvWriter('test.csv'),
)上述结果将是
{'header': 'test'}而不是预期的
header
test发布于 2018-03-07 13:56:11
TL;博士
使用中间的bonobo.UnpackItems(0)节点。
graph = bonobo.Graph(
bonobo.LdjsonReader(jsonld_input_file),
bonobo.UnpackItems(0),
bonobo.CsvWriter(csv_output_file),
)为什么会发生这种事?
在通信阶段,图节点的输入/输出总是规范化为某种元组(也就是允许节点说话的队列)。
当您生成一个dict时,它被归一化为这个dict的一个项元组(在bonobo图执行上下文中,产生{}等价于产生({} ) )。
然后,Writer将使用dict输入编写字符串表示形式.这就是你的结果。
bonobo.UnpackItems(...)
UnpackItems(.)节点将从其输入流元素中获取一些参数,并“解压”它们(将arg的内容转换为输出元组中的顶级值。dict键将用于使其成为一个类似于名称的对象,为以后的写入保留必要的标头。
参数是您对解压感兴趣的项目的“索引”。例如,给定这个输入行:({"foo":1},{"bar":2},{"baz":3}),如果您通过UnpackItems(0,2)节点传递它,您将得到(foo=1,bar=3)作为输出(最后一种表示法是元,它是namedtuple类型)。
引用应该在http://docs.bonobo-project.org/en/develop/reference/api/bonobo/nodes.html#bonobo.nodes.UnpackItems上进行,但我同意现在还有点缺乏细节。
https://stackoverflow.com/questions/49152166
复制相似问题