我试图打开一个有密码的word文档。
我使用docx包 - 有点旧
from docx import opendocx, getdocumenttext
以及
document = opendocx(filename)
我想知道opendocx上是否有选项允许它打开受密码保护的word文档 - 我确实知道密码。我在这里检查了github repo:https://github.com/mikemaccana/python-docx但是没有看到一个选项。我试图避免重写代码以使用更新的软件包,但这可能是不可避免的。
答案 0 :(得分:4)
python-docx目前不支持密码。我在代码中也没有找到它,但可以肯定的是,我在python-docx mailing list和received 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
似乎不支持加密文件。