Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import csv, cStringIO
- data = [['NULL/None value',None],
- ['empty string','']]
- f = cStringIO.StringIO()
- csv.writer(f).writerows(data)
- f = cStringIO.StringIO(f.getvalue())
- data2 = [e for e in csv.reader(f)]
- print "input : ", data
- print "output: ", data2
- data = [d if d!=None else 'None' for d in data]
- data2 = [d if d!='None' else None for d in data2]
- class NONE(object):
- def __repr__(self): # method csv.writer class uses to write values
- return 'NONE' # unique string value to represent None
- def __len__(self): # method called to determine length and truthiness
- return 0 # (optional)
- NONE = NONE() # singleton instance of the class
- import csv
- import cStringIO
- data = [['None value', None], ['NONE value', NONE], ['empty string', '']]
- f = cStringIO.StringIO()
- csv.writer(f).writerows(data)
- f = cStringIO.StringIO(f.getvalue())
- print " input:", data
- print "output:", [e for e in csv.reader(f)]
- import csv
- class csvProxyBase(object): _NONE = '<None>' # unique value representing None
- class csvWriter(csvProxyBase):
- def __init__(self, csvfile, *args, **kwrags):
- self.writer = csv.writer(csvfile, *args, **kwrags)
- def writerow(self, row):
- self.writer.writerow([self._NONE if val is None else val for val in row])
- def writerows(self, rows):
- map(self.writerow, rows)
- class csvReader(csvProxyBase):
- def __init__(self, csvfile, *args, **kwrags):
- self.reader = csv.reader(csvfile, *args, **kwrags)
- def __iter__(self):
- return self
- def next(self):
- return [None if val == self._NONE else val for val in self.reader.next()]
- if __name__ == '__main__':
- import cStringIO as StringIO
- data = [['None value', None], ['empty string', '']]
- f = StringIO.StringIO()
- csvWriter(f).writerows(data)
- f = StringIO.StringIO(f.getvalue())
- print " input:", data
- print "output:", [e for e in csvReader(f)]
- >>> data = [['NULL/None value',None],['empty string','']]
- >>> i = cStringIO.StringIO()
- >>> csv.writer(i).writerows(map(str,row) for row in data)
- >>> print i.getvalue()
- NULL/None value,None
- empty string,
- >>> import json
- >>> json.dumps(['foo', '', None, 666])
- '["foo", "", null, 666]'
- >>>
- import csv, cStringIO
- NULL = '<NULL>' # something unlikely to ever appear as a regular value in your csv files
- class MyCsvWriter(object):
- def __init__(self, *args, **kwrds):
- self.csv_writer = csv.writer(*args, **kwrds)
- def __getattr__(self, name):
- return getattr(self.csv_writer, name)
- def writerow(self, row):
- self.csv_writer.writerow([item if item is not None else NULL
- for item in row])
- def writerows(self, rows):
- for row in rows:
- self.writerow(row)
- class MyCsvReader(object):
- def __init__(self, *args, **kwrds):
- self.csv_reader = csv.reader(*args, **kwrds)
- def __getattr__(self, name):
- return getattr(self.csv_reader, name)
- def __iter__(self):
- rows = iter(self.csv_reader)
- for row in rows:
- yield [item if item != NULL else None for item in row]
- data = [['NULL/None value', None],
- ['empty string', '']]
- f = cStringIO.StringIO()
- MyCsvWriter(f).writerows(data) # instead of csv.writer(f).writerows(data)
- f = cStringIO.StringIO(f.getvalue())
- data2 = [e for e in MyCsvReader(f)] # instead of [e for e in csv.reader(f)]
- print "input : ", data
- print "ouput : ", data2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement