csvpp

csvpp Mercurial Source Tree


Root/csv2.py

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)
Source at commit 6bb7abecbe5c created 11 years 4 months ago.
By Nathan Adams, Fixing variable

Archive Download this file

Branches

Tags

Page rendered in 2.38788s using 11 queries.