csvpp/csv2.py

65 lines
2.0 KiB
Python

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)