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)