首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Bonobo将数据写入CSV

使用Bonobo将数据写入CSV
EN

Stack Overflow用户
提问于 2018-03-07 12:37:57
回答 1查看 739关注 0票数 1

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

但是,当我向bononbo.CsvWriter生成一个dict时,结果是一个包含dict的单个字段,该字段表示为一个字符串。

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

代码语言:javascript
复制
graph = bonobo.Graph(
    bonobo.LdjsonReader('test.jsonl'),
    bonobo.CsvWriter('test.csv'),
)

同样,显式使用dict也会产生相同的结果:

代码语言:javascript
复制
graph = bonobo.Graph(
lambda: {'header': 'test'},
bonobo.CsvWriter('test.csv'),
)

上述结果将是

代码语言:javascript
复制
{'header': 'test'}

而不是预期的

代码语言:javascript
复制
header
test
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-07 13:56:11

TL;博士

使用中间的bonobo.UnpackItems(0)节点。

代码语言:javascript
复制
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上进行,但我同意现在还有点缺乏细节。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49152166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档