识别加密word文件
Python本身是难以识别word文件的加密状态的,那我们可以考虑利用程序在处理有密码的文档的时候的报错信息来进行处理。word文件有两种密码,一种是“打开密码”,另一种是“修改密码”。对于前者,若不输入正确的密码,是无法打开文件查看内容的;对于后者,即使不知道密码,还是可以用只读模式打开文件,查看内容并另存为新的文件的。
因此对于设置了“修改密码”的doc文件,并不影响用如下程序另存为docx文件。只是在另存之前,窗口会弹出如下对话框,我们只需要点击一下“只读”即可,程序就能正常运行下去。
如果设置了“打开密码”,程序在运行的时候也会弹出对话框,让输入密码。如果输入正确的密码,程序也是可以运行的;如果不知道密码或输入错误密码,则程序会出现如下的“com_error”错误。如果不知道密码,可以加入try..except..语句,让程序在except语句中将这个文件移动到名字为“有密码文件”的文件夹,以便后续处理。
实现代码:
from win32com import client as wc # 导入模块
file = r"C:\Users\dywei\python\python_excel\实例65_Python区分出加密的word文件\doc文件\\测试-有打开密码.doc"
word = wc.Dispatch("Word.Application") # 打开word应用程序
doc = word.Documents.Open(file) # 打开word文件
doc.SaveAs("{}x".format(file), 12) # 另存为后缀为".docx"的文件,其中参数12指docx文件
doc.Close() # 关闭原来word文件
word.Quit()
# 增加异常处理语句
import shutil # 用于操作文件和文件夹
from win32com import client as wc
file = r"C:\Users\dywei\python\python_excel\实例65_Python区分出加密的word文件\doc文件\\测试-有打开密码.doc"
try:
word = wc.Dispatch("Word.Application") # 打开word应用程序
doc = word.Documents.Open(file) # 打开word文件
doc.SaveAs("{}x".format(file), 12) # 另存为后缀为".docx"的文件,其中参数12指docx文件
doc.Close() # 关闭原来word文件
word.Quit()
except:
# 将有密码的文件移动到专门的文件夹
shutil.move(file, r"C:\Users\dywei\python\python_excel\实例65_Python区分出加密的word文件\有密码文件")
print(f"已移动加密文件 {file}")
# #文件有“打开密码”的情况
# import docx
# doc = docx.Document('docx文件\\报告-有打开密码.docx')
# PackageNotFoundError: Package not found at 'docx文件\报告-有打开密码.docx'
# 文件有“修改密码”的情况
import docx
doc = docx.Document('docx文件\\报告-有修改密码.docx')
p = doc.paragraphs[0]
pNew = p.insert_paragraph_before()
run = pNew.add_run("测试")
doc.save("docx文件\\报告-有修改密码.docx")
import docx
import shutil
file = "docx文件\\报告-有打开密码.docx"
try:
doc = docx.Document(file)
pass
except:
shutil.move(file, '有密码文件')
print(f"已移动加密文件 {file} 到指定文件夹")