Python и urllib - PullRequest
       16

Python и urllib

7 голосов
/ 18 февраля 2010

Я пытаюсь загрузить 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 site с помощью функции glob?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 18 февраля 2010

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

Для обработки архивов с модулем zipfileих можно записать в файл на диске, который затем передается конструктору 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
4 голосов
/ 18 февраля 2010
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())
3 голосов
/ 18 февраля 2010

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

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

...