【发布时间】:2018-01-31 07:09:45
【问题描述】:
我正在尝试将一个大的 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',但是当写入另一个文件时,原始内容会丢失。
【问题讨论】:
-
你想做什么?如果你只是想读写另一个文件,用“rb”
with open('h.docx', 'rb') as f:读取它,用wb写入它 -
我正在尝试读取一个大的 docx 文件并希望将其拆分为多个小文件。所以我想我不能在这里将文件作为二进制文件读取。
-
.docx 文件是二进制文件,因此您必须使用“rb”打开它们。此外,如果您要将整个 blob 分成几块,您将得不到任何有用的东西。 .docx 文件实际上是压缩档案。试试这个:将文件扩展名更改为 .zip 并使用存档实用程序打开它,然后您将能够看到其中的内容。文本嵌入在一些 XML 文件中。
标签: python file encoding utf-8 decode