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
相关产品推荐
相关产品推荐

