在用户的个人资料目录下下载

时间:2014-04-23 21:07:21

标签: python

我很难将刚刚下载的文件放在脚本所在的任何其他文件夹中。这真的没关系,但我试图用ninite远程更新一些程序。我可以下载文件,但只能下载脚本所在的文件夹。我需要在下载后使用一些命令行参数(即无声)运行nininte.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 个答案:

答案 0 :(得分:2)

您可以使用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'))

答案 1 :(得分:2)

看起来您正在尝试使用等效于~/Downloads/ninite的Windows。 os.path.expanduser()库函数将在这里为您提供帮助。你可以这样做:

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

这将返回文件的完整路径。虽然代字号是Unix的东西,但在Windows上它会替换你的%userprofile%环境变量。

答案 2 :(得分:1)

看起来你想要使用的是%userprofile%,它是Windows上的环境变量。 open()不会扩展它,并会按字面意思对待它。您应该使用os.environ('userprofile')来检索存储在环境变量中的路径,并使用它来构建文件的完整路径。这样的事情可以解决问题:

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