Python et urllib

j'essaie de télécharger un fichier zip ("tl_2008_01001_edges.zip") à partir d'un ftp recensement site à l'aide de urllib. Sous quelle forme se présente le fichier zip lorsque je l'obtiens et comment puis-je le sauvegarder?

Je suis assez nouveau en Python et je ne comprends pas comment fonctionne urllib.

C'est ma tentative:

import urllib, sys

zip_file = urllib.urlretrieve("ftp://ftp2.census.gov/geo/tiger/TIGER2008/01_ALABAMA/Autauga_County/", "tl_2008_01001_edges.zip")

si je connais la liste des dossiers ftp (ou comtés dans ce cas), puis-je passer par le site ftp liste utilisant la fonction glob?

Merci.

7
demandé sur ferkulat 2010-02-18 18:31:50

3 réponses

utiliser urllib2.urlopen() pour les données des fichiers zip et .

pour traiter des fichiers zip avec le module zipfile , vous pouvez les écrire dans un fichier disque qui est ensuite passé au constructeur zipfile.ZipFile . Extraire les données est simple en utilisant read() sur l'objet file-like retourné par urllib2.urlopen() .

accéder aux répertoires:

>>> files = urllib2.urlopen('ftp://ftp2.census.gov/geo/tiger/TIGER2008/01_ALABAMA/').read().splitlines()
>>> for l in files[:4]: print l
... 
drwxrwsr-x    2 0        4009         4096 Nov 26  2008 01001_Autauga_County
drwxrwsr-x    2 0        4009         4096 Nov 26  2008 01003_Baldwin_County
drwxrwsr-x    2 0        4009         4096 Nov 26  2008 01005_Barbour_County
drwxrwsr-x    2 0        4009         4096 Nov 26  2008 01007_Bibb_County
>>> 

Ou, fractionnement pour les noms de répertoire:

>>> for l in files[:4]: print l.split()[-1]
... 
01001_Autauga_County
01003_Baldwin_County
01005_Barbour_County
01007_Bibb_County
8
répondu gimel 2010-02-18 16:20:18
import os,urllib2
out=os.path.join("/tmp","test.zip")
url="ftp://ftp2.census.gov/geo/tiger/TIGER2008/01_ALABAMA/01001_Autauga_County/tl_2008_01001_edges.zip"
page=urllib2.urlopen(url)
open(out,"wb").write(page.read())
4
répondu ghostdog74 2010-02-18 15:50:14

Par les docs , urlretrieve met le fichier sur le disque et renvoie un tuple (filename, headers) . Le fichier est donc déjà sauvegardé lorsque urlretrieve revient.

vous pouvez ouvrir et lire le fichier ZIP que vous avez récupéré avec le module zipfile de la bibliothèque standard. glob ne fonctionne pas dans les fichiers Zip, mais uniquement dans les répertoires normaux du système de fichiers.

3
répondu Alex Martelli 2010-02-18 15:37:37