Skip to content

Commit

Permalink
#12 UnicodeWriter was added to project for created csv files with uni…
Browse files Browse the repository at this point in the history
…code characters
  • Loading branch information
karavanjo committed Apr 8, 2014
1 parent 767ffaf commit 45e72ae
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions eco/utils/csv_utf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import csv, codecs, cStringIO


class UnicodeWriter:
'''
A CSV writer which will write rows to CSV file 'f',
which is encoded in the given encoding.
'''

def __init__(self, f, dialect=csv.excel_tab, encoding='utf-8', **kwds):
# Redirect output to a queue
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()

def writerow(self, row):
self.writer.writerow([s.encode('utf-8') if isinstance(s, unicode) else s for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode('utf-8')
# ... and reencode it into the target encoding
data = self.encoder.encode(data)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)

def writerows(self, rows):
for row in rows:
self.writerow(row)

0 comments on commit 45e72ae

Please sign in to comment.