2010-02-18 15 views
7

Estoy intentando descargar un archivo zip ("tl_2008_01001_edges.zip") a partir de una census sitio ftp usando urllib. ¿En qué forma está el archivo zip cuando lo consigo y cómo lo guardo?Python y urllib

Soy bastante nuevo en Python y no entienden cómo funciona urllib.

Este es mi intento:

import urllib, sys 

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

Si sé la lista de carpetas FTP (o condados en este caso), puedo ejecutar a través de la lista de ftp site usando la función glob?

Gracias.

Respuesta

8

Uso urllib2.urlopen() para los datos de archivos zip y listado de directorios.

Para procesar archivos zip con el módulo zipfile, puede escribirlos en un archivo de disco que luego se pasa al constructor zipfile.ZipFile. recuperación de los datos es sencillo usando read() en el objeto fichero devuelto por urllib2.urlopen().

directorios: Captación de

>>> 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 
>>> 

O, división de nombres de directorio:

>>> for l in files[:4]: print l.split()[-1] 
... 
01001_Autauga_County 
01003_Baldwin_County 
01005_Barbour_County 
01007_Bibb_County 
+0

Muchas gracias - esto explica exactamente lo que necesito hacer. Ahora estoy felizmente descargando unos cientos de archivos usando esto. – djq

3

Por the docs, urlretrieve pone el archivo en el disco y devuelve una tupla (filename, headers). Entonces el archivo ya está guardado cuando urlretrieve regresa.

Puede abrir y leer el archivo ZIP que ha recuperado con el módulo zipfile de la biblioteca estándar. glob no funciona dentro de archivos zip, solo en directorios normales del sistema de archivos.

+1

Gracias - por lo que si uso urllib.urlretrieve ("ftp://ftp2.census.gov/geo/ tiger/TIGER2008/01_ALABAMA/01001_Autauga_County/tl_2008_01001_edges.zip "," F: // ") que lo guarda en mi F-drive? En cuanto a mi pregunta global, no estaba muy claro; Me preguntaba cómo hojeé una lista de carpetas ftp en el sitio, en lugar de hacerlo en un archivo 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

Gracias - esto explica por qué tengo que ir a salvar el objeto archivo zip, que es muy útil – djq

Cuestiones relacionadas