打开加密Excel文件时触发FileNotFoundError问题求助
问题修复:加密XLS文件读取时的FileNotFoundError
核心错误原因
- 文件路径不完整:
os.listdir()返回的只是文件夹内的文件名,并非完整路径。当脚本的当前工作目录不是目标文件夹时,open(files, ...)会找不到对应文件。 - 文件打开模式错误:加密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
相关产品推荐
相关产品推荐

