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)

三其他改进

欢迎交流不同改进意见

相关推荐
艾莉丝努力练剑16 分钟前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(三)
c语言·开发语言·数据结构·学习·算法
Chasing__Dreams22 分钟前
python--杂识--18.1--pandas数据插入sqlite并进行查询
python·sqlite·pandas
彭泽布衣1 小时前
python2.7/lib-dynload/_ssl.so: undefined symbol: sk_pop_free
python·sk_pop_free
witton2 小时前
Go语言网络游戏服务器模块化编程
服务器·开发语言·游戏·golang·origin·模块化·耦合
喜欢吃豆2 小时前
从零构建MCP服务器:FastMCP实战指南
运维·服务器·人工智能·python·大模型·mcp
一个处女座的测试2 小时前
Python语言+pytest框架+allure报告+log日志+yaml文件+mysql断言实现接口自动化框架
python·mysql·pytest
枯萎穿心攻击2 小时前
ECS由浅入深第三节:进阶?System 的行为与复杂交互模式
开发语言·unity·c#·游戏引擎
Jerry Lau2 小时前
go go go 出发咯 - go web开发入门系列(一) helloworld
开发语言·前端·golang
nananaij2 小时前
【Python基础入门 re模块实现正则表达式操作】
开发语言·python·正则表达式
Micro麦可乐3 小时前
Java常用加密算法详解与实战代码 - 附可直接运行的测试示例
java·开发语言·加密算法·aes加解密·rsa加解密·hash算法