【问题标题】:pygrametl CSVSource TypeError: init() takes at least 2 arguments (1 given)pygrametl CSVSource TypeError: init() 需要至少 2 个参数(1 个给定)
【发布时间】:2017-05-10 07:39:57
【问题描述】:

我正在尝试使用 pygrametl CSVSource,如 documentation 所示

这是我的代码

import pygrametl
from pygrametl.datasources import CSVSource

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

但即使我使用确切的代码,我也会收到以下错误。

TypeError: init() 至少需要 2 个参数(给定 1 个)

我该如何解决这个问题?

【问题讨论】:

    标签: python csv typeerror pygrametl


    【解决方案1】:

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

    如果我们查看DictReader 类的源代码(准确地说是__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=的情况下进行了测试,它工作正常。

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多