Frage
Ich versuche, eine Zip-Datei ( "tl_2008_01001_edges.zip") von einem FTP zum Download Volkszählung Website mit urllib. Welche Form ist die Zip-Datei in, wenn ich es bekommen und wie speichere ich es?
Ich bin ziemlich neu in Python und nicht verstehen, wie urllib funktioniert.
Dies ist mein Versuch:
import urllib, sys
zip_file = urllib.urlretrieve("ftp://ftp2.census.gov/geo/tiger/TIGER2008/01_ALABAMA/Autauga_County/", "tl_2008_01001_edges.zip")
Wenn ich die Liste der FTP-Ordner (oder Landkreise in diesem Fall) weiß, ich kann laufen gelassen durch ftp Website Liste mit der glob-Funktion?
Danke.
Lösung
Verwenden Sie urllib2.urlopen()
für die Zip-Datei Daten und Verzeichnisliste.
Zur Verarbeitung von ZIP-Dateien mit dem zipfile
Modul, können Sie schreiben sie in eine Datei, die dann an den zipfile.ZipFile
Konstruktor übergeben wird.
Abrufen der Daten ist unkompliziert read()
auf die Datei-ähnliches Objekt unter Verwendung zurückgegeben
von urllib2.urlopen()
.
Fetching Verzeichnisse:
>>> 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
>>>
Oder Splitting für Verzeichnisnamen:
>>> for l in files[:4]: print l.split()[-1]
...
01001_Autauga_County
01003_Baldwin_County
01005_Barbour_County
01007_Bibb_County
Andere Tipps
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())
die docs , urlretrieve
puts die Datei auf der Festplatte und gibt ein Tupel (filename, headers)
. So ist die Datei bereits gespeichert, wenn urlretrieve
kehrt zurück.
Sie können die ZIP-Datei öffnen und lesen Sie mit der zipfile Modul der Standardbibliothek. glob
funktioniert nicht innerhalb ZipFiles, nur auf normale Dateisystem-Verzeichnisse.