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失敗する可能性のあるすべてのケースで適切なエラーメッセージを表示したい場合、もちろん、そのうちの100万のバリエーションがあります-私はそのようなものの2、3しか使用していません例としてのケース...):

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 answer を使用することですが、ループの代わりに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 に答える