Python и URL-адрес

Я пытаюсь загрузить zip-файл ("tl_2008_01001_edges.zip") с ftp сайт переписи с использованием urllib. В какой форме находится zip-файл, когда я его получаю, и как его сохранить?

Я новичок в Python и не понимаю, как работает urllib.

Это моя попытка:

import urllib, sys

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

Если я знаю список ftp-папок (или округов в данном случае), могу ли я запустить ftp список сайтов с помощью функции glob?

Спасибо.


person djq    schedule 18.02.2010    source источник


Ответы (3)


Используйте urllib2.urlopen() для данных ZIP-файла и листинг каталога.

Для обработки zip-файлов с помощью модуля zipfile их можно записать в disk файл, который затем передается конструктору zipfile.ZipFile. Получить данные просто, используя read() для файлового объекта, возвращаемого urllib2.urlopen().

Получение каталогов:

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

Или, разбивая имена каталогов:

>>> for l in files[:4]: print l.split()[-1]
... 
01001_Autauga_County
01003_Baldwin_County
01005_Barbour_County
01007_Bibb_County
person gimel    schedule 18.02.2010
comment
Большое спасибо - это точно объясняет, что мне нужно сделать. Теперь я с радостью загружаю несколько сотен файлов, используя это. - person djq; 18.02.2010

Согласно документам, urlretrieve помещает файл на диск. и возвращает кортеж (filename, headers). Таким образом, файл уже сохранен, когда urlretrieve возвращается.

Вы можете открыть и прочитать полученный ZIP-файл с помощью zipfile модуль стандартной библиотеки. glob не работает внутри zip-файлов, только в обычных каталогах файловой системы.

person Alex Martelli    schedule 18.02.2010
comment
Спасибо, если я использую urllib.urlretrieve(ftp2.census. gov/geo/tiger/TIGER2008/01_ALABAMA/, F://), который сохраняет его на моем F-диске? Что касается моего вопроса о глобусе, я не очень ясно выразился; Мне было интересно, как я просматриваю список папок ftp на сайте, а не в zip-файле. - person djq; 18.02.2010

person    schedule
comment
Спасибо - это объясняет, как мне нужно сохранить объект zipfile, что очень полезно - person djq; 18.02.2010