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

两盒软妹~` 提交于 2019-12-20 04:37:03

问题


I am trying to use pygrametl CSVSource as shown in the documentation

This is my code

import pygrametl
from pygrametl.datasources import CSVSource

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

but I get the following error even though I use the exact code.

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

How can I fix this?


回答1:


From the documentation You mentioned, we can see that CSVSource is just reference to DictReader from csv module.

If we look at the source code of DictReader class (it's __init__ method, to be precise), we see this:

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

Since there is no keyword csvfile in the input arguments, this argument is passed to **kwds, meaning argument f is missing. I don't have this library installed, but I think that just passing open('src.csv', 'r', 16384) without csvfile= will fix this issue. Something like this:

import pygrametl
from pygrametl.datasources import CSVSource

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

Update: Just installed pygrametl and tested without csvfile=, it works fine.



来源:https://stackoverflow.com/questions/41321096/pygrametl-csvsource-typeerror-init-takes-at-least-2-arguments-1-given

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!