8
votes

Télécharger et décoder le fichier avec Python

J'essaie de télécharger et d'ouvrir un fichier zippé et semble avoir du mal à utiliser une poignée de type de fichier avec Zipfile. J'obtiens l'erreur "AttributeError: AddInfourL Instance n'a aucun attribut" Cherche "" lors de l'exécution:

import zipfile
import urllib2

def download(url,directory,name):
 webfile = urllib2.urlopen('http://www.sec.gov'+url)
 webfile2 = zipfile.ZipFile(webfile)
 content = zipfile.ZipFile.open(webfile2).read()
 localfile = open(directory+name, 'w')
 localfile.write(content)
 localfile.close()
 return()

download(link.get("href"),'./fails_data', link.text)


0 commentaires

5 Réponses :


5
votes

Vous ne pouvez pas rechercher sur un fichier urllib2.urlopen ed fichier. Les méthodes informatiques sont répertoriées ici: http://docs.python.org/library/urllib.html# urllib.urlopen .

Vous devrez récupérer le fichier (éventuellement avec urllib.urlretrieve , http://docs.python.org/library/urllib.html#urllib.urlretrieve ), utilisez ensuite zipfile dessus.

Alternativement, vous pouvez LIRE () Le fichier urlopen ED, puis mettez-le dans un stringio , puis utilisez zipfile < / Code> À ce sujet, si vous souhaitez que les données zippées en mémoire. Découvrez également l'extrait et extrayant_all méthodes de zipfile si vous souhaitez simplement extraire le fichier, au lieu d'utiliser lire .


0 commentaires

6
votes

Mettre les choses ensemble, ce qui suit récupère le contenu du premier fichier dans un fichier zippé à partir d'un site Web:

import urllib.request
import zipfile
    
url = 'http://www.gutenberg.lib.md.us/4/8/8/2/48824/48824-8.zip'
filehandle, _ = urllib.request.urlretrieve(url)
zip_file_object = zipfile.ZipFile(filehandle, 'r')
first_file = zip_file_object.namelist()[0]
file = zip_file_object.open(first_file)
content = file.read()


1 commentaires

Pour les nouvelles versions Python, do importer urllib.request comme URLLIB à la place de la première ligne.



3
votes

A partir de 2020, vous pouvez utiliser Dallo pour télécharger et décompresser un fichier, c'est-à-dire: xxx pré>

Par défaut, il extrait sur un dir sur le chemin de script avec le nom du fichier zip, mais vous pouvez spécifier l'extrait d'extrait: p>

dload.save_unzip("https://file-examples.com/wp-content/uploads/2017/02/zip_2MB.zip", "/extract/here")


2 commentaires

Quelqu'un est-il maintenu cela que je n'ai pas vu un seul commit depuis mars?


@Ari ne semble pas comme ça, ce qui est regrettable parce que cela ressemble à un paquet vraiment cool. Je rencontre également Cette erreur lors de l'utilisation sauvegarde_unzip



2
votes

Je n'ai pas assez de représentant pour commenter, mais en ce qui concerne la réponse de Marius ci-dessus, veuillez noter que pour Python3, il existe une légère modification nécessaire en ce qui concerne l'appel d'importation et d'urlretrerie, car Urllib a été divisé en plusieurs modules.

filehandle, _ = urllib.request.urlretrieve(url)


0 commentaires

1
votes

Itération sur @Marius Réponse (qui lit un seul fichier directement à partir du zip), si vous souhaitez extraire tous les fichiers sur un répertoire, procédez comme suit:

import urllib
import zipfile

url = "http://www.gutenberg.lib.md.us/4/8/8/2/48824/48824-8.zip"
extract_dir = "example"

zip_path, _ = urllib.request.urlretrieve(url)
with zipfile.ZipFile(zip_path, "r") as f:
    f.extractall(extract_dir)


0 commentaires