Вопрос
Я пытаюсь загрузить 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?
Спасибо.
Решение
Использование urllib2.urlopen()
для получения данных zip-файла и список каталогов.
Для обработки zip-файлов с помощью 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
Другие советы
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())
Пер документы, urlretrieve
помещает файл на диск и возвращает кортеж (filename, headers)
.Таким образом, файл уже сохранен, когда urlretrieve
возвращается.
Вы можете открыть и прочитать полученный ZIP-файл с помощью zip-файл модуль стандартной библиотеки. glob
не работает внутри zip-файлов, только в обычных каталогах файловой системы.