2010-02-18 15 views
7

Próbuję pobrać plik zip ("tl_2008_01001_edges.zip") z witryny ftp census za pomocą urllib. W jakiej formie znajduje się plik zip, kiedy go otrzymam i jak go zapisać?Python i urllib

Jestem całkiem nowy w Pythonie i nie rozumiem, jak działa urllib.

To moja próba:

import urllib, sys 

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

Jeśli wiem listę folderów FTP (lub powiatów w tym przypadku), można uruchomić poprzez listę ftp site użyciu funkcji glob?

Dzięki.

Odpowiedz

8

Zastosowanie urllib2.urlopen() do danych pliku zip i katalogu aukcji.

Aby przetwarzać pliki zip za pomocą modułu zipfile, można zapisać je w pliku dysku, który następnie zostanie przekazany do konstruktora zipfile.ZipFile. Pobieranie danych jest proste za pomocą read() na obiekcie podobnym do pliku zwróconym przez urllib2.urlopen().

Pobieranie katalogów:

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

Albo, podział nazw katalogu:

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

Dziękuję bardzo - to wyjaśnia dokładnie, co muszę zrobić. Teraz z przyjemnością ściągam z tego kilkaset plików. – djq

3

Na the docs, urlretrieve umieszcza plik na dysku i zwraca krotkę (filename, headers). Tak więc plik jest już zapisany po powrocie urlretrieve.

Możesz otworzyć i przeczytać pobrany plik ZIP za pomocą modułu zipfile biblioteki standardowej. glob nie działa w plikach zip, tylko w normalnych katalogach systemu plików.

+1

Dzięki - więc jeśli mogę użyć urllib.urlretrieve ("ftp://ftp2.census.gov/geo/ tygrys/TIGER2008/01_ALABAMA/01001_Autauga_County/tl_2008_01001_edges.zip "," F: // "), który zapisuje go na moim dysku F? Jeśli chodzi o moje globalne pytanie, nie byłam zbyt jasna; Zastanawiam się, jak przeglądam listę folderów ftp w witrynie, a nie w pliku 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

Dzięki - wyjaśniam, w jaki sposób muszę zrobić zapisanie obiektu zipfile, co jest bardzo przydatne. – djq

Powiązane problemy