Writing to io.BytesIO in csv fails in python3 Writing to io.BytesIO in csv fails in python3 python python

Writing to io.BytesIO in csv fails in python3


In Python3 csv.writer expects a file-like object opened in text mode.In Python2, csv.writer expects a file-like object opened in binary mode.

Therefore, in Python3, use io.StringIO, while in Python2 use io.BytesIO:

import ioimport csvimport sysPY3 = sys.version_info[0] == 3line_as_list = [u'foo', u'bar']encoding = 'utf-8'if PY3:    writer_file =  io.StringIO()else:    writer_file =  io.BytesIO()    line_as_list = [line.encode(encoding) for line in line_as_list]writer = csv.writer(writer_file, dialect='excel', delimiter=',')writer.writerow(line_as_list)content = writer_file.getvalue()if PY3:    content = content.encode(encoding)print(type(content))print(repr(content))

In Python3 the code above prints

<class 'bytes'>b'foo,bar\r\n'

In Python2 the code above prints

<type 'str'>'foo,bar\r\n'