[Python-checkins] python/nondist/sandbox/csv csv.py,1.25,1.26

montanaro@users.sourceforge.net montanaro@users.sourceforge.net
Sun, 09 Feb 2003 19:47:23 -0800


Update of /cvsroot/python/python/nondist/sandbox/csv
In directory sc8-pr-cvs1:/tmp/cvs-serv8462

Modified Files:
	csv.py 
Log Message:
add DictReader and DictWriter


Index: csv.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/csv/csv.py,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** csv.py	8 Feb 2003 15:22:55 -0000	1.25
--- csv.py	10 Feb 2003 03:47:21 -0000	1.26
***************
*** 56,57 ****
--- 56,87 ----
      delimiter = '\t'
  register_dialect("excel-tab", excel_tab)
+ 
+ 
+ class DictReader:
+     def __init__(self, f, fieldnames, rest=None, dialect="excel", *args):
+         self.fieldnames = fieldnames    # list of keys for the dict
+         self.rest = rest                # key to catch long rows
+         self.reader = reader(f, dialect, *args)
+ 
+     def next(self):
+         row = self.reader.next()
+         d = dict(zip(self.fieldnames, row))
+         if len(self.fieldnames) < len(row) and self.rest != None:
+             d[self.rest] = row[len(self.fieldnames):]
+         return d
+ 
+ 
+ class DictWriter:
+     def __init__(self, f, fieldnames, dialect="excel", *args):
+         self.fieldnames = fieldnames    # list of keys for the dict
+         self.writer = writer(f, dialect, *args)
+ 
+     def writerow(self, rowdict):
+         row = [rowdict.get(key, "") for key in self.fieldnames]
+         return self.writer.writerow(row)
+ 
+     def writerows(self, rowdicts):
+         rows = []
+         for rowdict in rowdicts:
+             rows.append([rowdict.get(key, "") for key in self.fieldnames])
+         return self.writer.writerows(rows)