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.
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
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())
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.