Python3 - 无法读取docx,odt文件 - UnicodeDecodeError:' utf-8'编解码器不能解码位置10中的字节0xea:无效的连续字节

时间:2018-01-31 07:09:45

标签: python file encoding utf-8 decode

我正在尝试将大型docx文件拆分为小文件。使用以下代码读取 python3.6 中的文件时。

with open('h.docx', 'r') as f:
    a = f.read()

它会抛出此错误。

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/usr/local/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xea in position 
  10: invalid continuation byte

h.docx是使用LibreOffice Calc创建的,其中只有'hello world'作为内容。我可以在Python 2.7中成功阅读,没有任何错误。

我试过

with open('h.docx', 'r', encoding='latin-1') as f:
    a = f.read()

在此我可以毫无错误地读取文件。但是当写入另一个文件时,原始内容将丢失。

还尝试了errors='surrogateescape',但是当写入另一个文件时,原始内容将丢失。

1 个答案:

答案 0 :(得分:0)

不是答案,但评论时间太长。你所做的只是没有意义:你正试图读一个&#34; .docx&#34;文件好像是一个的文本文件。这是一种复杂的格式,其中几个xml文件(可能还有其他...)连接成一个zip文件。您甚至不应考虑手工处理文件,除非:

  • 琐碎的变化,例如用另一个单词替换
  • 只读操作,例如研究特定字符串
  • 你想写一个docx处理包(祝你好运)

甚至那些都不是简单的操作。

有可能:

    当您仅将文件视为不透明内容时,
  • 将文件处理为二进制文件,例如通过网络连接发送
  • 使用python-docx
  • 等专用库 在Windows下
  • ,使用Word的自动化界面让word自己处理文件(comtypes可以在这里帮助)