Вы пытаетесь объединить значения unicode с байтовыми строками, а затем преобразовать результат в unicode, чтобы записать его в файл-объект, который, скорее всего, принимает только байтовые строки.
Не смешивайте строки Unicode и байтовые строки.
Открыть файл для записи с io.open()
для автоматизации кодирующей юникоды, а затем обрабатывать только Юникода в вашем коде:
import io
with io.open(filename, 'w', encoding='utf8') as fileout:
# code gathering stuff from BeautifulSoup
fileout.write(u'{};{};{}{}\n'.format(key, nameDict[key], src, alt)
Вы можете проверить csv
module обрабатывать выписывая разделитель разделенного значения. Если идти по этому пути, вы должны явно кодировать столбцы:
import csv
with open(filename, 'wb') as fileout:
writer = csv.writer(fileout, delimiter=';')
# code gathering stuff from BeautifulSoup
row = [key, nameDict[key], src + alt]
writer.writerow([c.encode('utf8') for c in row])
Если некоторые из этих данных поступает из других файлов, убедитесь, что вы также расшифровывает в Unicode в первую очередь; снова, io.open()
, чтобы прочитать эти файлы, вероятно, лучший вариант, чтобы данные были декодированы для значений Unicode для вас во время чтения.
Это Python 2? Почему вы * расшифровываете * от UTF-8 до unicode? Что такое 'fileout' точно? Что в ваших переменных? –
Это python 2, а в переменных - теги img, обработанные BeautifulSoup. – Allda
Итак, 'key',' nameDict [key] ',' src' и 'alt' являются ** всеми ** значениями из BeautifulSoup? Тогда эти значения являются unicode. –