2016-12-27 17 views
1

я следующий вывод, который я хочу написать в файл:питон записи умляуты в файл

l = ["Bücher", "Hefte, "Mappen"] 

я сделать это нравится:

f = codecs.open("testfile.txt", "a", stdout_encoding) 
f.write(l) 
f.close() 

в моем Textfile я хочу видеть: [ «Bücher», «Hefte,„Mappen“] вместо B \ xc3 \ xbccher

есть ли способ сделать это без зацикливания по списку и декодировать каждый элемент? хотел предоставить функцию write() любой параметр?

Большое спасибо

+0

Что такое 'stdout_encoding'? – ForceBru

+0

извините его utf-8 – Constantine

ответ

2

Во-первых, убедитесь, что вы используете Юникода строки: добавить «и» префикс строки:

l = [u"Bücher", u"Hefte, u"Mappen"] 

Тогда вы можете написать или добавить в файл:

Я рекомендую вам использовать модуль io, совместимый с Python 2/3.

with io.open("testfile.txt", mode="a", encoding="UTF8") as fd: 
    for line in l: 
     fd.write(line + "\n") 

Чтобы прочитать текстовый файл в одном куске:

with io.open("testfile.txt", mode="r", encoding="UTF8") as fd: 
    content = fd.read() 

Результат содержание является строка Unicode.

Если расшифровать эту строку, используя кодировку UTF8, вы получите байт строку, как это:

b"B\xc3\xbccher" 

Edit с помощью writelines.

Метод writelines() записывает последовательность строк в файл. Последовательностью может быть любой итерируемый объект, производящий строки, обычно список строк. Возвратного значения нет.

# add new lines 
lines = [line + "\n" for line in l] 

with io.open("testfile.txt", mode="a", encoding="UTF8") as fd: 
    fd.writelines(lines) 
+0

Спасибо. В случае, если у меня должен быть выход, содержащий более одного списка, мне нужно кодировать элементы в списках отдельно. У меня нет возможности сделать это за один шаг для вывода ВСЕ, не зная, какой список может содержать умлауты, а что нет? Я искал решение, которое позволяет мне записывать вывод в файл без отдельного цикла над списком и кодировать строки отдельно. – Constantine

+0

Непонятно, что вы действительно хотите сделать. Кодирование (или декодирование) требуется только при записи (или чтении) файла. Поскольку текстовые файлы представляют собой потоки байтов: внутреннее представление всегда представляет собой массив байтов. Классическое использование - использование кодировки UTF8 для этого. –

+0

Я хочу написать информацию в файл .txt, и у меня есть проблема, что некоторые строки правильно показаны в текстовом файле, таком как Bücher и другие строки, которые находятся внутри списка, показаны как B \ xc3 \ xbcer. – Constantine