gpt4 book ai didi

python - 使用 Bonobo-ETL 将字典写入 CSV

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:38 24 4
gpt4 key购买 nike

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

但是,当我将字典生成给 bononbo.CsvWriter 时,结果是包含表示为字符串的字典的单个字段。

这可以使用转换脚本复制:

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

类似地,显式地使用字典会得到相同的结果:

graph = bonobo.Graph(
lambda: {'header': 'test'},
bonobo.CsvWriter('test.csv'),
)

上面的结果将是

{'header': 'test'}

而不是预期的

header
test

最佳答案

长话短说

在中间使用一个 bonobo.UnpackItems(0) 节点。

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

为什么会这样?

图节点的输入/输出总是在通信阶段(又名,让节点交谈的队列)标准化为某种元组。

当你生成一个字典时,它被规范化为这个字典的一个单项元组(在倭黑猩猩图执行上下文中,yield {} 等同于 yield ({}, ))。

然后,Writer 将使用 dict-in-a-tuple 输入写入字符串表示形式。因此你的结果。

bonobo.UnpackItems(...)

UnpackItems(...) 节点将从其输入流元素中获取一些参数并“解压”它们(将 arg 的内容转换为输出元组中的顶级值。dict 键将用于制作它一个类似 namedtuple 的对象,保留必要的 header 供以后写入。

参数是您有兴趣拆包的项目的“索引”。例如,给定此输入行:({"foo": 1}, {"bar": 2}, {"baz":3}),如果您通过 UnpackItems(0, 2) 节点传递它,您将得到 (foo=1, bar=3) 作为输出(最后一个符号是 meta,它是 namedtuple 类型)。

引用应位于 http://docs.bonobo-project.org/en/develop/reference/api/bonobo/nodes.html#bonobo.nodes.UnpackItems但我承认现在有点缺乏细节。

关于python - 使用 Bonobo-ETL 将字典写入 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49152166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com