2016-06-16 3 views
1

я объявить BytesIO() объект, чтобы написать через csv.writer как:Невозможно записать байт типа строки с использованием csv.writer в Python3

lines = ["abc", "def", "ghi"] 
writer_file = io.BytesIO() 
writer = csv.writer(writer_file)   
writer.writerow(str(lines).encode("utf-8")) 

но я получаю ошибку:

TypeError: a bytes-like object is required, not 'str' 

но когда я проверьте типы, я получаю объект bytes.

In [14]: type(str(lines).encode("utf-8")) 
Out[14]: bytes 

Что это значит?

Примечание: я не могу использовать io.StringIO(), чтобы поддерживать этот код для python2. (Исходя мои предположения об этом: different io types for csv in python 2 and 3)

+0

Вы можете использовать 'io.StringIO 'и по-прежнему совместимы с python2 ... Вы бы использовали строки unicode на python3, но никаких причин, по которым это могло бы повлиять на результат. Обе версии python будут использовать свой класс' str'. Другим вариантом является просто использовать всегда Unicode ... В любом случае, все равно – JBernardo

+0

@JBernardo http://stackoverflow.com/questions/13120127/how-can-i-use-io-stringio-with-the-csv-module – goelakash

ответ

1

В настоящее время, я просто проверить версию системы питона и применить соответствующий io.*IO() объект для Csv письменного вида:

import sys 

lines = ["abc", "def", "ghi"] 
if sys.version_info >= (3.0): 
    writer_file = io.StringIO() 
else: 
    writer_file = io.BytesIO() 

writer = csv.writer(writer_file)   
writer.writerow(lines) 
Смежные вопросы