2

我正在尝试将 zip 文件下载到本地驱动器并将所有文件解压缩到目标文件夹。

所以我想出了解决方案,但它只是将一个文件从一个目录“下载”到另一个目录,但它不适用于下载文件。对于提取,我可以让它在 2.6 中工作,但不能在 2.5 中工作。因此,我绝对愿意接受有关解决方法或其他方法的任何建议。提前致谢。

######################################
'''this part works but it is not good for URl links''' 
import shutil

sourceFile = r"C:\Users\blueman\master\test2.5.zip"
destDir = r"C:\Users\blueman\user"
shutil.copy(sourceFile, destDir)
print "file copied"
######################################################

'''extract works but not good for version 2.5'''
import zipfile

GLBzipFilePath =r'C:\Users\blueman\user\test2.5.zip'
GLBextractDir =r'C:\Users\blueman\user'

def extract(zipFilePath, extractDir):
 zip = zipfile(zipFilePath)
 zip.extractall(path=extractDir)
 print "it works"

extract(GLBzipFilePath,GLBextractDir)

######################################################
4

3 回答 3

14

urllib.urlretrieve可以从 URL 到给定路径获取文件(zip 或其他;-)。

extractall在 2.6 中确实是新的,但在 2.5 中您可以使用显式循环(获取所有名称、打开每个名称等)。您需要示例代码吗?

所以这是一般的想法(需要更多try/except如果你想在每个可能出错的情况下给出一个很好的错误消息,当然,其中有一百万个变体 - 我只使用了几个这样的案例作为例子......):

import os
import urllib
import zipfile

def getunzipped(theurl, thedir):
  name = os.path.join(thedir, 'temp.zip')
  try:
    name, hdrs = urllib.urlretrieve(theurl, name)
  except IOError, e:
    print "Can't retrieve %r to %r: %s" % (theurl, thedir, e)
    return
  try:
    z = zipfile.ZipFile(name)
  except zipfile.error, e:
    print "Bad zipfile (from %r): %s" % (theurl, e)
    return
  for n in z.namelist():
    dest = os.path.join(thedir, n)
    destdir = os.path.dirname(dest)
    if not os.path.isdir(destdir):
      os.makedirs(destdir)
    data = z.read(n)
    f = open(dest, 'w')
    f.write(data)
    f.close()
  z.close()
  os.unlink(name)
于 2009-11-21T03:49:40.533 回答
2

如需下载,请查看 urllib:

import urllib
webFile = urllib.urlopen(url)

对于解压缩,使用zipfile。另请参阅此示例

于 2009-11-21T03:49:06.947 回答
2

到目前为止,我发现的最短方法是使用 +alex 答案,但使用ZipFile.extractall()而不是循环:

from zipfile import ZipFile
from urllib import urlretrieve
from tempfile import mktemp

filename = mktemp('.zip')
destDir = mktemp()
theurl = 'http://www.example.com/file.zip'
name, hdrs = urlretrieve(theurl, filename)
thefile=ZipFile(filename)
thefile.extractall(destDir)
thefile.close()
于 2015-11-30T19:07:24.947 回答