Python docx-AttributeError:“ bytes”对象没有属性“ seek”

时间:2020-02-06 11:08:46

标签: python docx

我的输入内容:docx文档原始字节为byte64格式。
我要实现的目标是:从此文档中提取文本以进行进一步处理。
我尝试遵循以下答案:extracting text from MS word files in python

我的代码片段:

base64_bytes = input.encode('utf-8')
decoded_data = base64.decodebytes(base64_bytes)
document = Document(decoded_data)
docText = '\n\n'.join([paragraph.text.encode('utf-8') for paragraph in document.paragraphs])

document = Document(decoded_data)行给我以下错误:AttributeError: 'bytes' object has no attribute 'seek'
decoded_data的格式如下:b'PK\\x03\\x04\\x14\\x00\\x08\\x08\\x08\\x00\\x87@CP\\x00...

我应该如何格式化原始数据以从docx中提取文本?

1 个答案:

答案 0 :(得分:3)

在官方文档中,重点是我的:

docx.Document(docx = None)

返回从docx加载的Document对象,其中 docx可以是.docx文件(字符串)的路径,也可以是类似文件的对象。如果缺少docx或“无”,则将加载内置的默认文档“模板”。

因此,如果您提供字符串或类似字符串的参数,它将被解释为docx文件的路径。为了从内存中提供内容,您需要传入一个文件名即BytesIO实例的对象(StringIO和BytesIO的全部要点是将字符串和字节“转换”为文件名的对象):

document = Document(io.BytesIO(decoded_data))

旁注:您可能想删除列表推导中的.encode调用,在Python 3中,文本(str)和字节(bytes)根本不兼容,因此该行将被炸掉当您尝试使用文本分隔符连接字节(编码文本)时。