我很难将刚刚下载的文件放在脚本所在的任何其他文件夹中。这真的没关系,但我试图用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')
时,它会返回一个错误,表明没有该文件或带有该名称的目录。
答案 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')