如何解决Python读取被占用Excel文件时报PermissionError的问题
读取被独占打开Excel文件的解决方案
核心逻辑
Excel文件被用户编辑时会被加独占锁,直接读取原文件会触发PermissionError。PowerQuery可以正常读取的原因是它会自动生成文件的临时副本再读取,我们可以直接模拟这个逻辑,同时优化读取效率解决PowerQuery过慢的问题。
优化后可直接运行的代码
import os import pandas as pd import shutil import tempfile # 替换为你的Excel文件所在文件夹路径 transfolder = r"你的文件夹路径" # 用列表存储分块数据,比反复append效率高数十倍 df_list = [] for filename in os.listdir(transfolder): # 只处理标准Excel格式,自动跳过Office生成的临时锁文件 if not filename.lower().endswith(('.xlsx', '.xls', '.xlsb')) or filename.startswith('~$'): continue src_path = os.path.join(transfolder, filename) try: # 创建自动销毁的临时目录 with tempfile.TemporaryDirectory() as temp_dir: # 复制原文件到临时目录,复制操作不受独占锁限制 temp_path = os.path.join(temp_dir, filename) shutil.copy2(src_path, temp_path) # 读取临时文件数据 current_df = pd.read_excel(temp_path, sheet_name='Main') df_list.append(current_df) print(f"读取完成:{filename}") except Exception as e: print(f"读取失败:{filename},错误信息:{str(e)},已跳过该文件") # 合并所有数据为最终dataframe transdf = pd.concat(df_list, ignore_index=True)
额外说明
- 该方案跨Windows、Mac、Linux平台可用,不需要依赖本地安装的Office组件
- 读取效率远高于PowerQuery,适合大文件批量处理场景
- 增加了异常捕获逻辑,单个文件读取失败不会中断整个合并流程
内容的提问来源于stack exchange,提问作者Sn4k3Ch4rm3r
相关产品推荐
相关产品推荐

