python自动移除excel文件密码(升级v2版本)

欢迎查看第一版

https://blog.csdn.net/weixin_45631815/article/details/140013476?spm=1001.2014.3001.5502

一功能改进

此版本主要改进功能有以下:

  1. 直接可以调用函数实现
  2. 可以尝试多个密码
  3. 没有加密的文件进行保存,可以按实际业务进行改进.
  4. 思路来源:java 面向对象设计模式.(解码失败后的策略模式1进行尝试2对异常进行处理)

二具体代码实现

python 复制代码
import msoffcrypto
import os
# 已加密Excel文件路径
encrypted_file = r"已加密Excel文件路径"
# 未加密文件将保存的路径
unencrypted_file = r"未加密文件将保存的路径"
# Excel文件可能的密码列表
excel_passwords = ["密码1", "密码2"]
def decrypt_excel(encrypted_file, unencrypted_file, excel_passwords):
    for password in excel_passwords:
        try:
            # 打开加密文件
            with open(encrypted_file, "rb") as encrypted_file_fd:
                office_file = msoffcrypto.OfficeFile(encrypted_file_fd)

                # 尝试使用当前密码解密
                office_file.load_key(password=password)

                # 如果没有抛出异常,说明密码正确,进行解密并跳出循环
                with open(unencrypted_file, "wb") as unencrypted_file_fd:
                    office_file.decrypt(unencrypted_file_fd)

                print(f"文件已使用密码'{password}'解密并保存至:{unencrypted_file}")
                break  # 密码正确,解密完成,结束循环

        except msoffcrypto.exceptions.InvalidKeyError:
            continue  # 当前密码错误,尝试下一个密码
        # 如果文件[Unencrypted document]没有加密直接就退出循环
        except msoffcrypto.exceptions.FileFormatError:
            # 没有加密的文件,直接复制操作
            with open(unencrypted_file, "wb") as unencrypted_file_fd:
                unencrypted_file_fd.write(open(encrypted_file, "rb").read())
            break
        except Exception as e:
            print(f"解密过程中发生错误:{e}")
            break  # 发生其他错误,结束循环
directory_path = r"G:\路径加密"
for root, dirs, files in os.walk(directory_path):
    for file in files:
        print(os.path.join(root, file))
        m=r'{}'.format(os.path.join(root, file))
        outm=r'{}'.format(os.path.join(root.replace('加密',''),file))
        decrypt_excel(m,outm,excel_passwords)

三其他改进

欢迎交流不同改进意见

相关推荐
安如树几秒前
使用pnpm workspace管理多个软件包
开发语言·前端·javascript
峥无2 分钟前
《C++ STL 关联式容器完全指南:深度解析 map 与 set 的使用》
开发语言·c++·set·map
Pyeako4 分钟前
Opencv计算机视觉--阈值处理&图像运算&图像平滑处理
人工智能·python·opencv·计算机视觉·阈值处理·图像平滑处理·图像运算
Data_agent5 分钟前
从零开始用Python生成码:自定义样式与Logo嵌入
前端·javascript·python
獨枭7 分钟前
C# 项目找不到命名空间的问题排查记录
开发语言·c#
MarkHD7 分钟前
智能体在车联网中的应用:第39天 车联网领域知识深化:从理论到实践——车辆运动学模型(自行车模型)详解与Python实现
开发语言·人工智能·python
2501_941810837 分钟前
面向数据质量治理与在线校验机制的互联网系统设计思考与多语言工程实践经验分享
java·开发语言
林shir8 分钟前
Java基础2.5-多线程
java·开发语言
DP+GISer9 分钟前
04基于pytorch的深度学习遥感地物分类全流程实战教程(包含遥感深度学习数据集制作与大图预测)-实践篇-使用自己的数据集进行深度学习遥感地物分类
pytorch·python·深度学习·图像分割·遥感·数据集制作·地物分类
alonewolf_9910 分钟前
Spring推断构造方法源码深度解析:从@Autowired到@Bean的完整实现机制
java·python·spring