在用户的个人目录下下载

0 投票
3 回答
1697 浏览
提问于 2025-04-18 03:59

我在把刚下载的文件放到其他文件夹时遇到了困难,只能放到脚本所在的文件夹。其实这没什么大不了的,但我正在用ninite远程更新一些程序。我可以下载文件,但只能放到脚本所在的文件夹。我需要在下载完成后运行ninite.exe,并且要加上一些命令行参数(比如静默安装),这些参数我打算通过一个批处理脚本传给它。我希望能把文件直接放到下载文件夹里。可是我在网上搜索时,只找到关于如何把Python安装到特定文件夹的内容。

这是我目前的代码

import urllib

ninite = urllib.urlopen("www.downloadSite.com")
localFile = open('ninite.exe', 'wb')
localFile.write(ninite.read())
ninite.close()

这个脚本运行得很好,但当我尝试添加文件夹位置 localFile = open('%userprofile%/Downloads/ninite', 'wb') 时,它返回一个错误,提示没有那个文件或目录。

3 个回答

1

看起来你想用的是 %userprofile%,这是Windows系统中的一个环境变量。使用 open() 的话,它不会自动把这个变量展开,而是会把它当作普通的字符串来处理。你应该使用 os.environ('userprofile') 来获取这个环境变量中存储的路径,然后用这个路径来构建文件的完整路径。像下面这样就可以了:

localFile = open(os.environ['USERPROFILE']+'/ninite.exe', 'wb')
2

看起来你想在Windows上使用类似于~/Downloads/ninite的路径。这里有一个叫做os.path.expanduser()的库函数可以帮你。你可以这样做:

import os.path
os.path.expanduser('~/Downloads/ninite.exe')

这样做会返回文件的完整路径。虽然波浪号(~)是Unix系统的用法,但在Windows上,它会替换成你的%userprofile%环境变量。

3

你可以使用 os.path.expandvars() 这个函数来展开环境变量,比如在目标目录名称中使用 %userprofile%。然后,你可以用 urllib.urlretrieve() 来下载文件:

#!/usr/bin/env python
import os
import urllib

url = "https://example.com/path" # where to get the file from
dest_dir = os.path.expandvars('%userprofile%/Downloads/ninite') # where to put it

# make the directories (recursively)
try:
    os.makedirs(dest_dir)
except OSError: # ignore errors
    pass

# download the file
urllib.urlretrieve(url, os.path.join(dest_dir, 'ninite.exe'))

撰写回答