2010-02-18 7 views
7

Je suis en train de télécharger un fichier zip ("tl_2008_01001_edges.zip") à partir d'un site ftp census en utilisant urllib. Quelle est la forme du fichier zip lorsque je l'obtiens et comment puis-je l'enregistrer? Je suis assez nouveau à Python et je ne comprends pas comment fonctionne urllib.Python et urllib

Ceci 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 utiliser la liste ftp site en utilisant la fonction glob?

Merci.

Répondre

8

Utilisez urllib2.urlopen() pour les données de fichier zip et liste des répertoires.

Pour traiter les fichiers zip avec le module zipfile, vous pouvez les écrire dans un fichier disque qui est ensuite transmis au constructeur zipfile.ZipFile. Récupération des données est simple en utilisant read() sur l'objet de type fichier retourné par urllib2.urlopen().

répertoires enjoués:

>>> 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, pour le fractionnement des 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 
+0

Merci beaucoup - cela explique exactement ce que je dois faire. Je suis maintenant heureux de télécharger quelques centaines de fichiers en utilisant cela. – djq

3

Par the docs, urlretrieve met le fichier sur le disque et retourne un vecteur (filename, headers). Ainsi, le fichier est déjà enregistré lorsque urlretrieve renvoie.

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, uniquement sur les répertoires de systèmes de fichiers normaux.

+1

Merci - donc si j'utilise urllib.urlretrieve ("ftp://ftp2.census.gov/geo/ tiger/TIGER2008/01_ALABAMA/01001_Autauga_County/tl_2008_01001_edges.zip "," F: // ") qui l'enregistre sur mon F-drive? En ce qui concerne ma question glob, je n'étais pas très clair; Je me demandais comment je boucle une liste de dossiers ftp sur le site, plutôt que dans un fichier zip. – djq

4
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()) 
+0

Merci - cela explique comment je dois faire pour sauver l'objet zipfile, ce qui est très utile – djq

Questions connexes