Root/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 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 95848a435a01 created 11 years 4 months ago. By Nathan Adams, changing char to string |
---|