【问题标题】:Reading accents with python-docx使用 python-docx 阅读口音
【发布时间】:2018-04-28 20:29:12
【问题描述】:

我想使用 python-docx 获取一些 docx 文件的纯文本,但由于文本是用西班牙语编写的,所以我在重音方面遇到了困难。

我正在使用this answer阅读文字:

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)

这是由于重音的读取/编码方式。

【问题讨论】:

    标签: python character-encoding docx python-docx


    【解决方案1】:

    没有文本,只有编码文本。

    您正在创建一个文本文件。文本文件是用字符编码编写的。该错误表示您正在写入的文本包含您的字符编码不支持的字符。

    因此,您必须选择不同的编码或不写入这些字符。请记住 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 是 UTF-8 编码时 número 的表示形式。无论向您展示什么,都只是试图“提供帮助”。

    【讨论】:

    • 谢谢,我使用了 import io 中的 open 方法,因为我正在使用旧版本的 Python
    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多