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

Python脚本执行遇PermissionError:文件夹权限问题求助

解决PermissionError: [Errno 13] Permission denied 错误

环境信息

  • Python 3.9.12
  • Windows 10 x64

报错信息

Traceback (most recent call last):
File "c:\Users\Dell Latitude 7480\Desktop\HC\HC.CHECKER.py", line 17, in 
read_file = pd.read_excel(abs_folder_path, sheet_name = 'MSAN Cabinets')
File "C:\Users\Dell Latitude 7480\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\util_decorators.py", line 311, in wrapper
return func(*args, **kwargs)
File "C:\Users\Dell Latitude 7480\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\excel_base.py", line 457, in read_excel
io = ExcelFile(io, storage_options=storage_options, engine=engine)
File "C:\Users\Dell Latitude 7480\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\excel_base.py", line 1376, in __init__
ext = inspect_excel_format(
File "C:\Users\Dell Latitude 7480\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\excel_base.py", line 1250, in inspect_excel_format
with get_handle(
File "C:\Users\Dell Latitude 7480\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\common.py", line 795, in get_handle
handle = open(handle, ioargs.mode)
PermissionError: [Errno 13] Permission denied: 'C:\Users\Dell Latitude 7480\Desktop\HC'

原脚本代码

import pandas as pd
import numpy as np
import os


print("Fixed Network Health Check Checker")

folder_path = name = input("Enter the folder path of your Raw files: ")

abs_folder_path = os.path.abspath(folder_path)


read_file = pd.read_excel(abs_folder_path, sheet_name = 'MSAN Cabinets')

read_file.to_csv(abs_folder_path, index = None, header = True)

df = pd.read_csv(abs_folder_path, encoding='unicode_escape')

#fixed
df['MSAN Interface'] = df['MSAN Interface'].replace(np.nan, 0)

df['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'] = df['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'].replace(np.nan, 0)

df['Homing AG2'] = df['Homing AG1'].replace(np.nan, 0)

df = df.iloc[:11255]


# filter "REGION" and drop unnecessary columns

f_df1 = df[df['REGION'] == 'MIN']
dropcols_df1 = f_df1.drop(df.iloc[:, 1:6], axis = 1)
dropcols_df2 = dropcols_df1.drop(df.iloc[:, 22:27], axis = 1)
dropcols_df3 = dropcols_df2.drop(df.iloc[:, 37:50], axis = 1)


# filter "MSAN Interface" and filter the peak util for >= 50%

f_d2 = dropcols_df3['MSAN Interface'] != 0
msan_int = dropcols_df3[f_d2]
f_msan_int = msan_int['Peak Util'] >= 0.5
new_df = msan_int[f_msan_int]


# filter "ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)" and filter the peak util for >= 50%

fblank_msan_int = dropcols_df3['MSAN Interface'] == 0
msan_int1 = dropcols_df3[fblank_msan_int]
f_df3 = dropcols_df3['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'] != 0
access_int1 = dropcols_df3[f_df3]
f_access_int1 = access_int1['Peak Util.1'] >= 0.5
new_df1 = access_int1[f_access_int1]


# filter "Homing AG1" and filter the peak util for >= 50%

fblank_msan_int1 = dropcols_df3['MSAN Interface'] == 0
msan_int2 = dropcols_df3[fblank_msan_int1]
f_access_int2 = msan_int2['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'] == 0
new_df2 = msan_int2[f_access_int2]
ag1 = new_df2['Peak Util.3'] >= 0.5
new_df3 = new_df2[ag1]

# Concatenate all DataFrames

pdList = [new_df, new_df1, new_df3]
final_df = pd.concat(pdList)


print(final_df.to_csv('output.csv', index = False))

错误原因

  1. 路径类型错误:传入pd.read_excel()的是文件夹路径,但该函数要求传入具体的Excel文件路径,尝试读取文件夹会触发权限拒绝错误。
  2. 写入路径错误:后续read_file.to_csv()同样传入文件夹路径,会尝试将文件夹作为文件写入,进一步引发权限问题。
  3. 冗余操作:将Excel转成CSV再读取是多余的,直接使用pd.read_excel()返回的DataFrame即可处理,无需额外转存。

修复方案

方案1:修改输入为具体Excel文件路径

调整脚本,让用户输入目标Excel文件的完整路径,同时移除冗余的CSV转存步骤:

import pandas as pd
import numpy as np
import os


print("Fixed Network Health Check Checker")

# 改为输入具体Excel文件路径
file_path = input("Enter the full path of your Excel raw file: ")

abs_file_path = os.path.abspath(file_path)

# 直接读取Excel文件,无需转CSV
df = pd.read_excel(abs_file_path, sheet_name='MSAN Cabinets')

#fixed
df['MSAN Interface'] = df['MSAN Interface'].replace(np.nan, 0)
df['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'] = df['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'].replace(np.nan, 0)
df['Homing AG2'] = df['Homing AG1'].replace(np.nan, 0)
df = df.iloc[:11255]

# filter "REGION" and drop unnecessary columns
f_df1 = df[df['REGION'] == 'MIN']
dropcols_df1 = f_df1.drop(df.iloc[:, 1:6], axis=1)
dropcols_df2 = dropcols_df1.drop(df.iloc[:, 22:27], axis=1)
dropcols_df3 = dropcols_df2.drop(df.iloc[:, 37:50], axis=1)

# filter "MSAN Interface" and filter the peak util for >= 50%
f_d2 = dropcols_df3['MSAN Interface'] != 0
msan_int = dropcols_df3[f_d2]
f_msan_int = msan_int['Peak Util'] >= 0.5
new_df = msan_int[f_msan_int]

# filter "ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)" and filter the peak util for >= 50%
fblank_msan_int = dropcols_df3['MSAN Interface'] == 0
msan_int1 = dropcols_df3[fblank_msan_int]
f_df3 = dropcols_df3['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'] != 0
access_int1 = dropcols_df3[f_df3]
f_access_int1 = access_int1['Peak Util.1'] >= 0.5
new_df1 = access_int1[f_access_int1]

# filter "Homing AG1" and filter the peak util for >= 50%
fblank_msan_int1 = dropcols_df3['MSAN Interface'] == 0
msan_int2 = dropcols_df3[fblank_msan_int1]
f_access_int2 = msan_int2['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'] == 0
new_df2 = msan_int2[f_access_int2]
ag1 = new_df2['Peak Util.3'] >= 0.5
new_df3 = new_df2[ag1]

# Concatenate all DataFrames
pdList = [new_df, new_df1, new_df3]
final_df = pd.concat(pdList)

# 输出到指定CSV文件
final_df.to_csv('output.csv', index=False)
print("Processing completed. Output saved to output.csv")

方案2:自动遍历文件夹中的Excel文件(如果有多个文件)

如果需要处理文件夹下所有Excel文件,可添加遍历逻辑:

import pandas as pd
import numpy as np
import os


print("Fixed Network Health Check Checker")

folder_path = input("Enter the folder path of your Raw files: ")
abs_folder_path = os.path.abspath(folder_path)

# 遍历文件夹下所有Excel文件
for filename in os.listdir(abs_folder_path):
    if filename.endswith('.xlsx') or filename.endswith('.xls'):
        file_path = os.path.join(abs_folder_path, filename)
        df = pd.read_excel(file_path, sheet_name='MSAN Cabinets')
        
        # 后续处理逻辑与方案1一致
        df['MSAN Interface'] = df['MSAN Interface'].replace(np.nan, 0)
        df['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'] = df['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'].replace(np.nan, 0)
        df['Homing AG2'] = df['Homing AG1'].replace(np.nan, 0)
        df = df.iloc[:11255]
        
        f_df1 = df[df['REGION'] == 'MIN']
        dropcols_df1 = f_df1.drop(df.iloc[:, 1:6], axis=1)
        dropcols_df2 = dropcols_df1.drop(df.iloc[:, 22:27], axis=1)
        dropcols_df3 = dropcols_df2.drop(df.iloc[:, 37:50], axis=1)
        
        f_d2 = dropcols_df3['MSAN Interface'] != 0
        msan_int = dropcols_df3[f_d2]
        f_msan_int = msan_int['Peak Util'] >= 0.5
        new_df = msan_int[f_msan_int]
        
        fblank_msan_int = dropcols_df3['MSAN Interface'] == 0
        msan_int1 = dropcols_df3[fblank_msan_int]
        f_df3 = dropcols_df3['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'] != 0
        access_int1 = dropcols_df3[f_df3]
        f_access_int1 = access_int1['Peak Util.1'] >= 0.5
        new_df1 = access_int1[f_access_int1]
        
        fblank_msan_int1 = dropcols_df3['MSAN Interface'] == 0
        msan_int2 = dropcols_df3[fblank_msan_int1]
        f_access_int2 = msan_int2['ACCESS Interface 1 (IPRAN, ATN, LSA, VLAN)'] == 0
        new_df2 = msan_int2[f_access_int2]
        ag1 = new_df2['Peak Util.3'] >= 0.5
        new_df3 = new_df2[ag1]
        
        pdList = [new_df, new_df1, new_df3]
        final_df = pd.concat(pdList)
        
        # 按原文件名生成输出CSV
        output_filename = f"output_{os.path.splitext(filename)[0]}.csv"
        final_df.to_csv(output_filename, index=False)
        print(f"Processed {filename}, output saved to {output_filename}")

额外注意事项

  • 确保运行脚本时拥有目标文件夹/文件的读写权限,必要时右键以管理员身份运行Python脚本。
  • 确认Excel文件未被其他程序(如Excel客户端)占用,否则会触发权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:01:30