我似乎无法在Bonobo ETL库中获得CsvReader来生成除元组以外的任何内容。该文档似乎表明它应该产生字典而不是元组,但是尝试一下,我似乎无法让它通过除元组以外的任何东西。我真的很想访问附加到每个值的列名。它引发一个错误,表明在传递时会出现列名,但是在我定义的转换方法中,只有值本身可用。import bonobodef printer(*csv): print(csv)def get_graph(**options): graph = bonobo.Graph() graph.add_chain( bonobo.CsvReader('csv.txt'), printer ) return graphdef get_services(**options): return {}if __name__ == '__main__': parser = bonobo.get_argument_parser() with bonobo.parse_args(parser) as options: bonobo.run(get_graph(**options), services=get_services(**options))它与打印机方法的参数有关吗?我知道,*csv当参数解压缩可迭代的参数时,其他任何可能的参数声明都将引发typeError。有什么建议么?避免完全使用内置的Bonobo CsvReader而不是仅创建使用DictReader或类似方法的提取方法会更好吗?
1 回答
Helenr
TA贡献1780条经验 获得超4个赞
文档可能存在问题,但是CsvReader确实会产生某种元组(实际上,它与namedtuples非常相似)是出于一个简单的原因:在python3.5中产生dict将导致字段顺序更改,以及一个简单的csvread -> csvwrite将以不可复制的方式更改字段顺序。
如果要检索“原始”输入(又称元组对象,未扩展为args),则可以使用@use_raw_input装饰器。
from bonobo.config import use_raw_input
@use_raw_input
def some_node(row):
for f in row._fields:
...
如果您知道期望的字段是显式的,则使用关键字参数是另一个选择。
def some_node(id, name, value):
...
希望能有所帮助。
添加回答
举报
0/150
提交
取消