Чтение акцентов с помощью python-docx - PullRequest
0 голосов
/ 28 апреля 2018

Я хочу получить простой текст некоторых файлов DOCX, используя python-docx, но я борюсь с акцентами, так как текст написан на испанском языке.

Я использую этот ответ , чтобы прочитать текст:

def getText(filename):
  doc = docx.Document(filename)
  fullText = []
  for para in doc.paragraphs:
      fullText.append(para.text('utf-8'))
  return '\n'.join(fullText)

Что возвращает такие вещи:

n\xc3\xbamero //should be número

Есть ли способ получить текст с правильными акцентами?

Когда я пытаюсь записать этот текст в файл, используя это:

file = open("/mnt/c/Users/lulas/Desktop/inSpanish/txt/course1.txt","w")
file.write(text)

Я получаю эту ошибку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xed' in position 27: ordinal not in range(128)

И это связано с тем, как акценты читаются / кодируются.

1 Ответ

0 голосов
/ 29 апреля 2018

Нет текста, кроме закодированного текста.

Вы создаете текстовый файл. Текстовый файл написан с кодировкой символов. Ошибка говорит о том, что текст, который вы пишете, содержит символы, которые не поддерживаются вашей кодировкой.

Итак, вы должны либо выбрать другую кодировку, либо не писать эти символы. Имейте в виду, 1) читатель должен знать, какую кодировку использует файл, чтобы об этом нужно было сообщить и / или согласовать. 2) Оригинальные персонажи могут быть высоко оценены, поэтому их удаление или замена могут быть плохим выбором.

Поскольку исходный файл (docx) использует набор символов Unicode, кодировка Unicode может быть оптимальным выбором. Для хранения и потоковой передачи Unicode, UTF-8 является наиболее распространенной кодировкой. Таким образом,

file = open("/mnt/c/Users/lulas/Desktop/inSpanish/txt/course1.txt","w", encoding="utf-8")
file.write(text)

Не думаю, что проблема в чтении. n \ xc3 \ xbamero - это представление número в кодировке UTF-8. Все, что вам показывает, просто пытается быть «полезным».

...