Вопрос:

Чтение Python из файла и сохранение в utf-8

python python-2.7 utf-8

196785 просмотра

3 ответа

1765 Репутация автора

У меня проблемы с чтением из файла, обработкой его строки и сохранением в файл UTF-8.

Вот код:

try:
    filehandle = open(filename,"r")
except:
    print("Could not open file " + filename)
    quit() 

text = filehandle.read()
filehandle.close()

Затем я делаю некоторую обработку текста переменной.

А потом

try:
    writer = open(output,"w")
except:
    print("Could not open file " + output)
    quit() 

#data = text.decode("iso 8859-15")    
#writer.write(data.encode("UTF-8"))
writer.write(text)
writer.close()

Это выводит файл отлично, но это делает в ISO 8859-15 в соответствии с моим редактором. Поскольку тот же редактор распознает входной файл (в переменной filename) как UTF-8, я не знаю, почему это произошло. Насколько мой исследователь показал, что закомментированные строки должны решить проблему. Однако, когда я использую эти строки, результирующий файл имеет в основном специальную символическую тарабарщину, слова с тильдой в качестве текста на испанском. Я был бы очень признателен за любую помощь, как я в тупике ....

Автор: aarelovich Источник Размещён: 25.10.2013 01:39

Ответы (3)


4 плюса

2664 Репутация автора

Вы не можете сделать это, используя open. использовать кодеки.

когда вы открываете файл в python с помощью встроенной функции open, вы всегда будете читать / записывать файл в ascii. Чтобы написать это в utf-8, попробуйте это:

import codecs
file = codecs.open('data.txt','w','utf-8')
Автор: Fernando Freitas Alves Размещён: 25.10.2013 01:52

161 плюса

105631 Репутация автора

Решение

Обработайте текст в и из Unicode на границах ввода / вывода вашей программы, используя codecsмодуль:

import codecs
with codecs.open(filename, 'r', encoding='utf8') as f:
    text = f.read()
# process Unicode text
with codecs.open(filename, 'w', encoding='utf8') as f:
    f.write(text)

Edit:io Теперь модуль рекомендуется вместо кодеков и совместим с Python 3 в openсинтаксисе:

import io
with io.open(filename, 'r', encoding='utf8') as f:
    text = f.read()
# process Unicode text
with io.open(filename, 'w', encoding='utf8') as f:
    f.write(text)
Автор: Mark Tolonen Размещён: 25.10.2013 01:55

7 плюса

95 Репутация автора

Вы также можете пройти через код ниже:

file=open(completefilepath,'r',encoding='utf8',errors="ignore")
file.read()
Автор: Siva Kumar Размещён: 27.07.2017 06:34
Вопросы из категории :
32x32