7

我正在尝试使用 urllib从 ftp人口普查站点下载 zip 文件(“tl_2008_01001_edges.zip”)。当我得到它时,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 文件夹列表(在这种情况下是县),我可以使用 glob 函数遍历 ftp站点列表吗?

谢谢。

4

3 回答 3

8

用于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
于 2010-02-18T16:04:55.060 回答
5
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())
于 2010-02-18T15:50:14.857 回答
3

根据文档urlretrieve将文件放入磁盘并返回一个元组(filename, headers)。所以文件在urlretrieve返回时已经保存。

您可以使用标准库 的zipfile模块打开和读取您检索到的 ZIP 文件。glob不能在 zipfiles 中工作,只能在普通文件系统目录上工作。

于 2010-02-18T15:37:37.173 回答