X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/28c55765f8f5edc8af2c43e49f5172a768d18eef..9616d8fcb2932b9556aea942fc19000111da2a13:/edumed/utils.py diff --git a/edumed/utils.py b/edumed/utils.py new file mode 100644 index 0000000..756ffa3 --- /dev/null +++ b/edumed/utils.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +import codecs +import csv + +import cStringIO + + +# source: https://docs.python.org/2/library/csv.html#examples +class UnicodeCSVWriter(object): + """ + 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, 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") 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) \ No newline at end of file