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

PySimpleGUI指定输出文件夹触发PermissionError[Errno13]权限问题求助

解决PySimpleGUI FolderBrowse触发PermissionError的问题

问题根源

你遇到的PermissionError: [Errno 13] Permission denied核心原因是:FolderBrowse组件返回的是文件夹路径,但boe_formatter函数需要的是完整的输出文件路径。直接传入文件夹路径时,函数会尝试将内容写入文件夹本身而非文件夹内的文件,系统会拒绝这种非法操作。

解决方案

以下两种方案均可解决问题,根据需求选择:

方案1:自动生成输出文件名(基于输入文件)

在调用boe_formatter前,将选中的文件夹路径与输入文件的文件名结合,生成合法的输出文件路径。修改main_window中的Format EF only事件逻辑:

if event == "Format EF only":
    input_file = values["-EF_IN-"]
    output_folder = values["-OUT-"]
    
    # 校验路径是否为空
    if not input_file or not output_folder:
        sg.popup_error("请选择输入文件和输出文件夹")
        continue
    
    # 从输入文件提取文件名,生成带格式化后缀的输出路径
    input_path = Path(input_file)
    output_file = Path(output_folder) / f"{input_path.stem}_formatted{input_path.suffix}"
    
    # 调用格式化函数
    boe_formatter(input_file, str(output_file))

方案2:让用户直接指定输出文件(替换FolderBrowse)

将主窗口中的FolderBrowse替换为FileSaveAs组件,直接获取完整的输出文件路径,更贴合boe_formatter的参数要求。修改主窗口布局:

layout = [[sg.T("Eligibility File:", s=15, justification="r"), sg.I(key="-EF_IN-"), sg.FileBrowse()],
          [sg.T("User List File:", s=15, justification="r"), sg.I(key="-UL_IN-"), sg.FileBrowse()],
          [sg.T("Target File:", s=15, justification="r"), sg.I(key="-OUT-"), sg.FileSaveAs(file_types=(("CSV Files", "*.csv"), ("All Files", "*.*")))],
          [sg.B("Format EF only", s=16), sg.B("Merge files", s=16), sg.B("Select client type", s=16)]]

调用逻辑保持基本不变,只需增加空路径校验:

if event == "Format EF only":
    if not values["-EF_IN-"] or not values["-OUT-"]:
        sg.popup_error("请选择输入文件和输出文件")
        continue
    boe_formatter(values["-EF_IN-"], values["-OUT-"])

额外注意事项

  • 两种方案都需增加路径有效性校验,避免空路径传入引发其他错误
  • 打包程序时,确保SBOE_Formatter.py被正确包含(比如用PyInstaller时,通过--add-data参数添加)
  • 无需管理员权限:用户的下载、文档等普通目录本来就支持非管理员写入,问题本质是路径类型不匹配,而非权限不足

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:31:04