为什么Bonobo的CsvReader()方法产生元组而不是字典?

我似乎无法在Bonobo ETL库中获得CsvReader来生成除元组以外的任何内容。该文档似乎表明它应该产生字典而不是元组,但是尝试一下,我似乎无法让它通过除元组以外的任何东西。我真的很想访问附加到每个值的列名。它引发一个错误,表明在传递时会出现列名,但是在我定义的转换方法中,只有值本身可用。


import bonobo



def printer(*csv):

    print(csv)



def get_graph(**options):

    graph = bonobo.Graph()

    graph.add_chain(

        bonobo.CsvReader('csv.txt'),

        printer

    )

    return graph



def 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或类似方法的提取方法会更好吗?


幕布斯6054654
浏览 122回答 1
1回答

Helenr

文档可能存在问题,但是CsvReader确实会产生某种元组(实际上,它与namedtuples非常相似)是出于一个简单的原因:在python3.5中产生dict将导致字段顺序更改,以及一个简单的csvread -> csvwrite将以不可复制的方式更改字段顺序。如果要检索“原始”输入(又称元组对象,未扩展为args),则可以使用@use_raw_input装饰器。from bonobo.config import use_raw_input@use_raw_inputdef some_node(row):    for f in row._fields:        ...如果您知道期望的字段是显式的,则使用关键字参数是另一个选择。def some_node(id, name, value):    ...希望能有所帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python