无法写入Users Downloads文件夹:FileNotFoundError问题排查求助
背景
我尝试将输出文件写入网络驱动器目录,同时也需要写入用户的Downloads文件夹,但在此过程中遇到了问题...
代码示例
我通过以下方式尝试访问用户的Downloads文件夹以实现预期输出:
downloads_folder_file = str(f'C:\\Users\\{os.getlogin()}\\Downloads\\Output_File_.xlsx')
问题现象
当代码尝试写入时,出现如下错误:
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'C:\\Users\\WILLIA~1.FOR\\AppData\\Local\\Temp\\39\\openpyxl.a_ys6_1g'
我清楚FileNotFoundError的含义,但不明白为何无法访问Downloads文件夹——我可以通过File Explorer正常访问C:\Users\username\Downloads。
已尝试操作
- 打印
downloads_folder_file时,能正确返回C:\Users\username\Downloads\。
请问我是否存在明显的操作错误?
首先要明确:错误提示指向的是临时目录中的openpyxl临时文件,并非你指定的Downloads文件夹本身。
问题排查与解决建议:
检查临时目录状态
错误里的C:\\Users\\WILLIA~1.FOR\\AppData\\Local\\Temp\\39这个临时子目录可能被误删、权限不足,或者系统无法自动生成。可以手动导航到该路径确认是否存在,若不存在则手动创建,或重启程序让系统重新初始化临时目录。替换硬编码的Downloads路径
你当前用C:\\Users\\{os.getlogin()}\\Downloads获取路径的方式存在隐患——Windows的Downloads路径可能因OneDrive同步、系统配置变更而改变(比如同步后路径会变成C:\Users\username\OneDrive\Downloads)。建议用标准API获取正确路径:# 使用Windows API获取官方Downloads路径 from win32com.shell import shell, shellcon downloads_folder = shell.SHGetFolderPath(0, shellcon.CSIDL_DOWNLOADS, None, 0) downloads_folder_file = f"{downloads_folder}\\Output_File_.xlsx"若不想依赖第三方库,也可以用
pathlib的更稳妥写法:from pathlib import Path downloads_folder = Path.home() / "Downloads" downloads_folder_file = str(downloads_folder / "Output_File_.xlsx")排查openpyxl的写入问题
错误和openpyxl的临时文件生成有关,可尝试:- 更新openpyxl到最新版本,修复已知的临时文件处理bug
- 先在本地可写的目录(比如当前程序运行目录)创建文件,再复制到Downloads文件夹
- 检查程序运行的用户权限:如果是用管理员身份启动,临时目录路径可能和普通用户不同,导致权限冲突
内容的提问来源于stack exchange,提问作者William

