22# author@alingse
33# 2015.10.09
44
5+ import six
6+ import csv
57import json
68import xlwt
79
@@ -18,15 +20,6 @@ def __init__(self, fin, fout, **kwargs):
1820 def initialize (self , ** kwargs ):
1921 pass
2022
21- def patch (self , value ):
22- if value is None :
23- return ''
24-
25- if value == {} or value == []:
26- return ''
27-
28- return value
29-
3023 def prepare (self ):
3124 pass
3225
@@ -51,7 +44,7 @@ def load_headers(fin, read_row=None, sort_type=None):
5144
5245 # read
5346 if not read_row or read_row < 1 :
54- read_row = 1
47+ read_row = - 1
5548
5649 for line in fin :
5750 obj = json .loads (line )
@@ -100,35 +93,34 @@ class DumpCSV(DumpExcel):
10093
10194 def initialize (self , ** kwargs ):
10295 super (DumpCSV , self ).initialize (** kwargs )
103-
104- self ._separator = kwargs .get ('separator' , ',' )
96+ self .csv_writer = None
10597
10698 def write_headers (self ):
107- header = self ._separator .join (self ._headers )
108- if PY3 :
109- self .fout .write (header )
110- else :
111- self .fout .write (header .encode ('utf-8' ))
112- self .fout .write ('\n ' )
113-
114- def patch (self , value ):
115- value = super (DumpCSV , self ).patch (value )
116- if PY3 :
117- return str (value )
99+ if not PY3 :
100+ # Python 2 csv does not support unicode
101+ fieldnames = [header .encode ('utf8' ) for header in self ._headers ]
118102 else :
119- return unicode (value ) # noqa
103+ fieldnames = self ._headers
104+ self .csv_writer = csv .DictWriter (self .fout , fieldnames )
105+ self .csv_writer .writeheader ()
120106
121107 def write_obj (self , obj ):
122- values = [
123- self .patch (obj .get (head ))
124- for head in self ._headers
125- ]
126- content = self ._separator .join (values )
127- if PY3 :
128- self .fout .write (content )
129- else :
130- self .fout .write (content .encode ('utf-8' ))
131- self .fout .write ('\n ' )
108+ self .csv_writer .writerow (self .patch_obj (obj ))
109+
110+ def patch_obj (self , obj ):
111+ new_obj = {}
112+ for key , value in obj .items ():
113+ if value in [None , {}, []]:
114+ value = ""
115+
116+ if not PY3 :
117+ # Python 2 csv does not support unicode
118+ key = key .encode ('utf8' )
119+ if isinstance (value , six .text_type ):
120+ value = value .encode ('utf8' )
121+
122+ new_obj [key ] = value
123+ return new_obj
132124
133125
134126class DumpXLS (DumpExcel ):
@@ -152,7 +144,7 @@ def write_obj(self, obj):
152144 self .cloumn = 0
153145
154146 for head in self ._headers :
155- value = self . patch ( obj .get (head ) )
147+ value = obj .get (head )
156148 self .ws .write (self .row , self .cloumn , value )
157149 self .cloumn += 1
158150
0 commit comments