使用bonobetl将dict写入CSV

2024-06-02 00:42:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试Bonobo,获取dict格式的数据源,然后写入CSV文件。在

然而,当我向bononbo.csv撰稿人,结果是一个包含以字符串表示的dict的单个字段。在

可以使用转换脚本进行复制:

graph = bonobo.Graph(
    bonobo.LdjsonReader('test.jsonl'),
    bonobo.CsvWriter('test.csv'),
)

同样,显式地使用dict也会得到相同的结果:

^{pr2}$

上述结果将是

{'header': 'test'}

而不是预期的

header
test

Tags: 文件csv字符串test脚本格式数据源dict
1条回答
网友
1楼 · 发布于 2024-06-02 00:42:24

TL;DR

使用倭黑猩猩。打开物品(0)中间节点。

graph = bonobo.Graph(
    bonobo.LdjsonReader(jsonld_input_file),
    bonobo.UnpackItems(0),
    bonobo.CsvWriter(csv_output_file),
)

为什么会这样?

在通信阶段,图节点的输入/输出总是规范化为某种元组(也就是让节点说话的队列)。

当您生成一个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,但我同意它现在有点缺少细节。

相关问题 更多 >