class RowReader(dict): header = [] skipheader = False def __init__(self,skipheader=False,newline="\n",*arg,**kw): super(RowReader, self).__init__(*arg, **kw) def __rrshift__(self, stream): strbuffer = "" buffer2 = "" currentheader = 0 strbuffer = stream strbuffer = strbuffer.strip() c = '' startquote = False if (len(self.header) == 0 and not self.skipheader): self.header = strbuffer.split(",") else: for i in range(0, len(strbuffer)): c = strbuffer[i] if c == ",": if startquote: buffer2 += c continue if not self.skipheader: self[self.header[currentheader]] = buffer2 else: self[str(currentheader)] = buffer2 buffer2 = "" currentheader += 1 continue if c == "\"": if startquote: buffer2 += "\"" buffer2 = buffer2.ltrim() if (i-1) >= 0 and buffer[i-1] == "\\": buffer2.write(c) continue startquote = not startquote if not startquote: for x in range(i, len(strbuffer)): if strbuffer[x] == ',' or x == len(strbuffer): i = x - 1 break buffer2 += c if not self.skipheader: self[self.header[currentheader]] = buffer2 else: self[str(currentheader)] = buffer2 return stream class RowWriter(list): def __init__(self,*arg,**kw): super(RowWriter, self).__init__(*arg, **kw) pass f = open("sampledata.csv") r = RowReader() for l in f: l >> r if r != {}: print str(r)