You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打开加密Excel文件时触发FileNotFoundError问题求助

问题修复:加密XLS文件读取时的FileNotFoundError

核心错误原因

  1. 文件路径不完整:os.listdir()返回的只是文件夹内的文件名,并非完整路径。当脚本的当前工作目录不是目标文件夹时,open(files, ...)会找不到对应文件。
  2. 文件打开模式错误:加密Excel文件属于二进制格式,必须用'rb'(只读二进制)模式打开,原代码用'r'(文本模式)会导致读取失败。

修正后的完整代码

import msoffcrypto
import io
import pandas as pd
import os

# 目标文件夹路径
path = "/Users/PATH/Desktop/Workspace/Projects"
# 存储所有读取到的数据
all_data = []

# 遍历目标文件夹下的文件
for filename in os.listdir(path):
    # 筛选后缀为.xls且前缀为EXAMPLE_File的文件
    if filename.endswith(".xls") and filename.startswith("EXAMPLE_File"):
        # 拼接完整文件路径(关键修复点)
        full_file_path = os.path.join(path, filename)
        
        # 解密并读取文件
        decrypted = io.BytesIO()
        # 用rb模式打开二进制文件(关键修复点)
        with open(full_file_path, 'rb') as f:
            excel = msoffcrypto.OfficeFile(f)
            excel.load_key('001234')
            excel.decrypt(decrypted)
        
        # 将读取到的数据存入列表
        df = pd.read_excel(decrypted)
        all_data.append(df)
        print(f"已读取文件:{filename}")

# 合并所有文件的数据(可选,根据需求调整)
if all_data:
    combined_df = pd.concat(all_data, ignore_index=True)
    print("\n合并后的数据:")
    print(combined_df)
else:
    print("未找到符合条件的加密XLS文件")

额外优化说明

  • 把decrypted = io.BytesIO()放到循环内,避免多个文件解密时覆盖之前的数据流。
  • 新增数据合并逻辑,适配多文件场景;若仅需处理单个文件,可删除合并相关代码。
  • 增加文件读取成功提示,便于排查执行状态。

内容的提问来源于stack exchange,提问作者Freymi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:20:04