pygrametl CSVSource TypeError: init() takes at least 2 arguments (1 given)

pygrametl CSVSource TypeError: init() takes at least 2 arguments (1 given)

我正在尝试使用 documentation

中所示的 pygrametl CSVSource

这是我的代码

import pygrametl
from pygrametl.datasources import CSVSource

src = CSVSource(csvfile=open('src.csv', 'r', 16384), \
                            delimiter=',')

但是即使我使用了正确的代码,我仍然收到以下错误。

TypeError: init() takes at least 2 arguments (1 given)

我该如何解决这个问题?

从您提到的文档中,我们可以看到 CSVSource 只是对 csv 模块中的 DictReader 的引用。

如果我们查看 DictReader class 的源代码(准确地说是 __init__ 方法),我们会看到:

class DictReader:
     def __init__(self, f, fieldnames=None, restkey=None, restval=None,
                  dialect="excel", *args, **kwds):
         self._fieldnames = fieldnames   # list of keys for the dict
         self.restkey = restkey          # key to catch long rows
         self.restval = restval          # default value for short rows
         self.reader = reader(f, dialect, *args, **kwds)
         self.dialect = dialect
         self.line_num = 0

由于输入参数中没有关键字 csvfile,因此将此参数传递给 **kwds,这意味着缺少参数 f。我没有安装这个库,但我认为只传递 open('src.csv', 'r', 16384) 而不传递 csvfile= 将解决这个问题。像这样:

import pygrametl
from pygrametl.datasources import CSVSource

src = CSVSource(open('src.csv', 'r', 16384), delimiter=',')

更新:刚刚安装了 pygrametl 并在没有 csvfile= 的情况下进行了测试,它工作正常。