如何用Python批量打开同文件夹下带相同密码的加密Excel文件?
批量解密并读取同文件夹下所有带密码的.xls文件
下面是基于你现有单文件逻辑扩展的批量处理代码:
import msoffcrypto import io import pandas as pd import glob # 配置参数 PASSWORD = 'your_password_here' # 替换为你的统一密码 TARGET_FOLDER = './' # 目标文件夹,当前目录用./,也可替换为绝对路径 # 获取文件夹下所有.xls文件 xls_files = glob.glob(f"{TARGET_FOLDER}*.xls") # 存储所有文件的DataFrame(可选,按需调整) all_dataframes = [] for file_path in xls_files: temp = io.BytesIO() try: with open(file_path, 'rb') as f: excel = msoffcrypto.OfficeFile(f) excel.load_key(PASSWORD) excel.decrypt(temp) # 读取解密后的文件 df = pd.read_excel(temp) print(f"成功读取文件: {file_path}") print(df.head()) # 打印前几行预览 # 将DataFrame加入列表,后续可合并或单独处理 all_dataframes.append(df) except Exception as e: print(f"处理文件 {file_path} 时出错: {str(e)}") finally: del temp # 释放内存 # 后续可对all_dataframes进行操作,比如合并所有数据 # combined_df = pd.concat(all_dataframes, ignore_index=True) # print(combined_df)
关键说明:
- 文件匹配:用
glob.glob(f"{TARGET_FOLDER}*.xls")获取目标文件夹下所有.xls文件,若需匹配子文件夹,可改用glob.glob(f"{TARGET_FOLDER}**/*.xls", recursive=True) - 循环处理:遍历每个文件路径,重复解密和读取逻辑,每次循环新建
BytesIO对象避免数据污染 - 异常处理:加入
try-except捕获错误,单个文件处理失败不会中断整个程序 - 数据存储:将每个文件的DataFrame存入列表,方便后续合并、分析或导出
内容的提问来源于stack exchange,提问作者Freymi
相关产品推荐
相关产品推荐

