使用docx库

时间:2015-06-11 17:17:08

标签: python-2.7 ms-word

我试图打开一个有密码的word文档。

我使用docx包 - 有点旧

from docx import opendocx, getdocumenttext

以及

 document = opendocx(filename)

我想知道opendocx上是否有选项允许它打开受密码保护的word文档 - 我确实知道密码。我在这里检查了github repo:https://github.com/mikemaccana/python-docx但是没有看到一个选项。我试图避免重写代码以使用更新的软件包,但这可能是不可避免的。

3 个答案:

答案 0 :(得分:4)

python-docx目前不支持密码。我在代码中也没有找到它,但可以肯定的是,我在python-docx mailing listreceived the following reply上询问了:

  

抱歉,没有。至少它没有内置功能。我不确定Word是如何工作的,可能值得进行一些研究。

     

如果它使用Zip存档的密码保护,你可以打开.docx文件(这是顶层的Zip),然后做一些我肯定会把它输入的东西。最坏的情况你可以把它保存为没有密码的另一个拉链并使用它。当然,临时zip可以是StringIO内存文件。

     

如果他们使用自己的加密技术,我希望它会更加困难:)

Docx使用自己的加密,而不是zip加密。这样只需要加密内部内容。有关解密docx文件的一些信息,请访问:

如果您不想更改代码,可以使用的一种方法是分叉docx包并添加代码以解密docx文件。如果您有另一个程序来解密文档,您也可以进行解密。

答案 1 :(得分:0)

如果.docx只有写保护,我认为docx包应该按原样运行,因为它可能忽略了XML的相关位。对于读保护,MS-OFFCRYPTO格式在Microsoft的网站https://msdn.microsoft.com/en-us/library/office/cc313071%28v=office.12%29.aspx?f=255&MSPPError=-2147217396上有详细描述。该文档具有伪代码https://www.lyquidity.com/devblog/?p=35处有一个C#实现。从理论上讲,它可以在python中实现所有这些功能,但是在当前的软件包关注XML和文本处理的基础上,它将会有很多额外的工作。

我认为目前唯一的选择是使用MS Word或LibreOffice解密文档,然后使用其他方法将文件加密为python可访问的格式。

答案 2 :(得分:0)

pywin32中的API可以打开受密码保护的.doc或.docx文件。功能  win32com.client.Dispatch可以通过调用WORD App打开一个.doc文件,并返回一个包含文件信息的对象。与可以使用对象的方法open加载数据相比,可以将密码传递给第5个参数。 这是我的代码: word = win32com.client.Dispatch('Word.Application') word.Visible = False word.DisplayAlerts = False doc = word.Documents.Open(document_path, False, True, None, psw) 参数psw是密码。

此方法似乎不支持多线程程序。创建新线程时出现错误。

模块docx似乎不支持加密文件。