【发布时间】:2014-05-21 17:40:57
【问题描述】:
这是我第一次尝试子类化,所以我需要一些专家的提示.. 我正在尝试子类化 csv.DictReader / Writer 以获得更高级别的类来执行以下操作:
a = CsvRdr('filename.csv')
for row in a.rows:
# do something with dict returned in row
a.close()
我想出了一个这样的子类:
class CsvRdr(csv.DictReader):
def __init__(self, filename):
self.__fo = open(filename, 'rb')
self.__delim = '\t'
self.rows = csv.DictReader(self.__fo, self.__delim)
self.rows.__init__(self.__fo, self.__del)
def close(self):
self.__fo.close()
但是当我这样做时:
for i in a.rows:
print i
它返回一个未格式化的字典,其中包含分隔符 \t 作为键:
{'\t': 'seriesid\tseriesname\tstatus\tquality\tgroup\tpath'}
{'\t': '80337\tMad Men\tAiring\thdtv\tTV Shows\t/share/MD0_DATA/SORT/TV Shows/Mad Men'}
{'\t': '271910\tHalt and Catch Fire\tHiatus\thdtv\tTV Shows\t/share/MD0_DATA/SORT/TV
而不是包含正确字段名和由分隔符分隔的相对值的字典
但是当我要从另一个函数实例化 DictReader 时,我需要做的就是:
fo = open(filename, 'rb')
reader = csv.DictReader(fo, delimiter='\t')
阅读器对象正确地为您提供所需的输出。
有什么建议吗? 我还不清楚子类化过程,到目前为止在网上找到的内容对我没有帮助。
TIA 恩里科
【问题讨论】:
-
快速思考......你的 init 需要调用 csv.DictReader 的 init 吗?
标签: python csv subclassing