22# author@alingse
33# 2015.10.09
44
5+ import csv
56import json
67import xlwt
78
@@ -18,15 +19,6 @@ def __init__(self, fin, fout, **kwargs):
1819 def initialize (self , ** kwargs ):
1920 pass
2021
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-
3022 def prepare (self ):
3123 pass
3224
@@ -51,7 +43,7 @@ def load_headers(fin, read_row=None, sort_type=None):
5143
5244 # read
5345 if not read_row or read_row < 1 :
54- read_row = 1
46+ read_row = - 1
5547
5648 for line in fin :
5749 obj = json .loads (line )
@@ -100,35 +92,31 @@ class DumpCSV(DumpExcel):
10092
10193 def initialize (self , ** kwargs ):
10294 super (DumpCSV , self ).initialize (** kwargs )
103-
104- self ._separator = kwargs .get ('separator' , ',' )
95+ self .csv_writer = None
10596
10697 def write_headers (self ):
107- header = self ._separator .join (self ._headers )
108- if PY3 :
109- self .fout .write (header )
98+ if not PY3 :
99+ fieldnames = [header .encode ('utf8' ) for header in self ._headers ]
110100 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 )
118- else :
119- return unicode (value ) # noqa
101+ fieldnames = self ._headers
102+ self .csv_writer = csv .DictWriter (self .fout , fieldnames )
103+ self .csv_writer .writeheader ()
120104
121105 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 ' )
106+ self .csv_writer .writerow (self .patch_obj (obj ))
107+
108+ def patch_obj (self , obj ):
109+ new_obj = {}
110+ for key , value in obj .items ():
111+ if value in [None , {}, []]:
112+ value = ""
113+ if not PY3 :
114+ key = key .encode ('utf8' )
115+ if isinstance (value , unicode ):
116+ value = value .encode ('utf8' )
117+
118+ new_obj [key ] = value
119+ return new_obj
132120
133121
134122class DumpXLS (DumpExcel ):
@@ -152,7 +140,7 @@ def write_obj(self, obj):
152140 self .cloumn = 0
153141
154142 for head in self ._headers :
155- value = self . patch ( obj .get (head ) )
143+ value = obj .get (head )
156144 self .ws .write (self .row , self .cloumn , value )
157145 self .cloumn += 1
158146
0 commit comments