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 io
import csv
import sys
PY3 = sys.version_info[0] == 3
line_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
'
In Python2 the code above prints
<type 'str'>
'foo,bar
'
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…