没有这样的文件或目录,奇怪或什么?

时间:2012-08-07 15:03:50

标签: python download urllib2

所以,

我一直在编写一个Downloader,每次运行它都会说:

Traceback (most recent call last):
  File "C:\Python27\Downloader.py", line 7, in <module>
    f = open('c:\\users\%USERNAME%\AppData\Roaming\.minecraft\mods\CreeperCraft.zip', 'wb+')
IOError: [Errno 2] No such file or directory: 'c:\\users\\%USERNAME%\\AppData\\Roaming\\.minecraft\\mods\\CreeperCraft.zip'

我现在,您可能会说,创建一个文件,但我希望脚本能够创建该文件。

那么,有人可以告诉我要修复什么吗?这是代码:

import urllib2
import os
import shutil
url = "https://dl.dropbox.com/u/29251693/CreeperCraft.zip"
file_name = url.split('/')[-1]
u = urllib2.urlopen(url)
f = open('c:\\users\%USERNAME%\AppData\Roaming\.minecraft\mods\CreeperCraft.zip', 'wb+')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print "Downloading: %s Bytes: %s" % (file_name, file_size)
file_size_dl = 0
block_sz = 8192
while True:
    buffer = u.read(block_sz)
    if not buffer:
        break
    file_size_dl += len(buffer)
    f.write(buffer)
    status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
    status = status + chr(8)*(len(status)+1)
    print status,
f.close()

3 个答案:

答案 0 :(得分:10)

问题是python没有意识到你正在使用%USERNAME%来引用一个环境变量,所以python从字面上解释它。你必须通过这样做告诉python它是一个环境变量:

替换

f = open('c:\\users\\%USERNAME%\\AppData\\Roaming\\.minecraft\\mods\\CreeperCraft.zip', 'wb+')

import os
f = open(os.path.expandvars('c:\\users\\%USERNAME%\\AppData\\Roaming\\.minecraft\\mods\\CreeperCraft.zip'), 'wb+')

答案 1 :(得分:8)

问题是%USERNAME%默认情况下未展开。在您的路径上使用os.path.expandvars

fp = path.expandvars(r'c:\\users\%USERNAME%\AppData\Roaming\.minecraft\mods\CreeperCraft.zip')

答案 2 :(得分:0)

我的方法是制作AppData文件夹&#34; un-hidden&#34;在Windows资源管理器中,然后就像使用其他文件一样通过Python正常访问它,即Python无法在cmd行上看到AppData,直到您取消隐藏&#34;它,然后你可以作为普通目录访问它。