gpt4 book ai didi

python - bonobo 方法重写后失败

转载 作者:行者123 更新时间:2023-12-01 02:01:45 25 4
gpt4 key购买 nike

我正在使用一个名为 bonobo 的轻型 ETL 库。csv 编写器 bonobo.CsvWriter 类有一个工厂方法:

def writer_factory(self, file):
return csv.writer(file, **self.get_dialect_kwargs()).writerow

与文档:

class CsvWriter(FileWriter, CsvHandler):
@Method(
__doc__='''
Builds the CSV writer, a.k.a an object we can pass a field collection to be written as one line in the
target file.

Defaults to builtin csv.writer(...).writerow, but can be overriden to fit your special needs.
'''
)

我想添加一些额外的参数来自定义我的 csv 文件,因此我尝试这样覆盖它:

class quoCsvWriter(bonobo.CsvWriter):    
def writer_factory(self, file):
return csv.writer(file, **self.get_dialect_kwargs(),quoting=csv.QUOTE_NONNUMERIC).writerow

当我将节点添加到链中时,程序显示:

Traceback (most recent call last):
File "geocoding.py", line 162, in <module>
get_graph(),
File "geocoding.py", line 135, in get_graph
quoCsvWriter('db_addresses.csv')
File "/Users/xxxx/xxxx/lib/python3.6/site-packages/bonobo/config/configurables.py", line 152, in __new__
missing.remove(name)
KeyError: 'writer_factory'

任何提示表示赞赏。

更新:

同时,当我尝试做

bonobo.CsvWriter('filename.csv',quoting=csv.QUOTE_MINIMAL)

它抛出错误:

TypeError  "quoting" must be an integer

最佳答案

从 bonobo 0.6 开始,直接重写子类中的 Method 实例并非易事。相反,您应该在构造函数参数中提供重写的实现。

def writer_factory(self, file):
return csv.writer(file, **{**self.get_dialect_kwargs(), 'quoting': csv.QUOTE_NONNUMERIC}).writerow

def get_graph(**options):
graph = bonobo.Graph()
graph.add_chain(
extract,
bonobo.CsvWriter('...', writer_factory=writer_factory),

)

return graph

如果您确实想为此用例进行子类化,则可以通过重写 get_dialect_kwargs() 方法来实现:

@use_context
class QuoteNonNumericCsvWriter(bonobo.CsvWriter):
def get_dialect_kwargs(self):
return {
**super().get_dialect_kwargs(),
'quoting': csv.QUOTE_NONNUMERIC,
}

这应该按预期工作。

当然,从 bonobo 0.6.2 开始,可以直接从编写器构造函数覆盖引用,之前存在一个错误,但现在已发布修复。

def get_graph(**options):
graph = bonobo.Graph()
graph.add_chain(
extract,
bonobo.CsvWriter('...', quoting=csv.QUOTE_NONNUMERIC),
)

所有三种方法都有完全相同的行为,您应该选择最后一种。

希望有帮助。

关于python - bonobo 方法重写后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49545257/

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