télécharger un fichier zip sur un lecteur local et extraire tous les fichiers vers un dossier de destination en utilisant python 2.5
j'essaie de télécharger un fichier zip sur un lecteur local et d'extraire tous les fichiers vers un dossier de destination.
donc j'ai trouvé une solution mais c'est seulement pour" télécharger " un fichier d'un répertoire vers un autre répertoire mais ça ne marche pas pour télécharger des fichiers. pour l'extraction, je suis capable de le faire fonctionner en 2.6 mais pas pour 2.5. donc, toutes les suggestions pour le travail autour ou une autre approche, je suis certainement ouvert à. merci à l'avance.
######################################
'''this part works but it is not good for URl links'''
import shutil
sourceFile = r"C:Usersbluemanmastertest2.5.zip"
destDir = r"C:Usersbluemanuser"
shutil.copy(sourceFile, destDir)
print "file copied"
######################################################
'''extract works but not good for version 2.5'''
import zipfile
GLBzipFilePath =r'C:Usersbluemanusertest2.5.zip'
GLBextractDir =r'C:Usersbluemanuser'
def extract(zipFilePath, extractDir):
zip = zipfile(zipFilePath)
zip.extractall(path=extractDir)
print "it works"
extract(GLBzipFilePath,GLBextractDir)
######################################################
3 réponses
urllib.urlretrieve peut obtenir un fichier (zip ou autre;-) à partir d'une URL vers un chemin donné.
extractall
est en effet le nouveau 2.6, mais en 2.5, vous pouvez utiliser explicitement la boucle (obtenir tous les noms, ouverte chaque nom, etc). Vous avez besoin d'un exemple de code?
donc voici l'idée générale (a besoin de plus try
/ except
si vous voulez donner un message d'erreur agréable dans chaque cas qui pourrait aller mal, dont, bien sûr, il sont un million de variantes -- Je n'utilise que deux de ces cas comme exemples...):
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)
pour le téléchargement, voir urllib:
import urllib
webFile = urllib.urlopen(url)
pour la décompression, utiliser zipfile . Voir aussi cet exemple .
le plus court chemin que j'ai trouvé jusqu'à présent, est d'utiliser +alex réponse, mais avec ZipFile.extractall () au lieu de la boucle:
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()