Python如何不硬编码用户名实现从网站下载文件到任意电脑桌面
问题根因
- Python原生的
open()函数不会自动解析Windows的环境变量占位符%userprofile%,因此你写的路径会被识别为字面字符串,系统找不到对应目录 - 你传入的路径仅指向桌面文件夹,没有指定具体保存的文件名,写入操作无法直接作用于文件夹
解决方案
方法1:使用os模块解析环境变量(兼容所有Python3版本)
首先导入os模块,通过os.environ读取系统环境变量,拼接完整的文件保存路径:
import os import requests if download_choice == "14": print("Downloading test file to Desktop...") myfile14 = requests.get(url14) # 读取用户目录环境变量,拼接桌面路径+保存文件名 desktop_path = os.path.join(os.environ["USERPROFILE"], "Desktop") # 自定义保存的文件名,可根据需求修改 save_path = os.path.join(desktop_path, "test_download.file") with open(save_path, 'wb') as f: f.write(myfile14.content)
这里用
with语句管理文件句柄是更规范的写法,能避免文件资源泄漏的问题
方法2:使用pathlib模块(推荐,Python3.4+支持)
pathlib是Python3推出的面向对象路径处理模块,写法更简洁不易出错:
from pathlib import Path import requests if download_choice == "14": print("Downloading test file to Desktop...") myfile14 = requests.get(url14) # 直接拼接桌面路径和文件名 save_path = Path.home() / "Desktop" / "test_download.file" with open(save_path, 'wb') as f: f.write(myfile14.content)
额外优化建议
- 可以在写入前加一行
myfile14.raise_for_status(),判断请求是否成功,避免下载到错误的响应内容写入文件 - 如果需要兼容桌面路径被用户手动修改的场景,可以通过读取Windows注册表获取桌面实际路径,常规使用场景下上述方法已经能覆盖99%以上的Windows设备
内容的提问来源于stack exchange,提问作者David_Bailey
相关产品推荐
相关产品推荐

