Python与urllib

7 投票
3 回答
11963 浏览
提问于 2025-04-15 19:26

我想从一个ftp网站下载一个压缩文件("tl_2008_01001_edges.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网站的列表呢?

谢谢。

3 个回答

3

根据文档urlretrieve这个函数会把文件下载到你的电脑上,并返回一个包含文件名和文件头信息的元组(filename, headers)。所以,当urlretrieve返回时,文件其实已经保存好了。

你可以使用标准库中的zipfile模块来打开和读取你下载的ZIP文件。不过要注意,glob这个功能只能在普通的文件夹里使用,不能在ZIP文件里面使用。

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

8

使用 urllib2.urlopen() 来获取压缩文件的数据 目录列表。

要处理压缩文件,可以用 zipfile 模块。你可以把这些文件写入磁盘上的一个文件,然后把这个文件传给 zipfile.ZipFile 的构造函数。获取数据很简单,只需要在通过 urllib2.urlopen() 返回的类文件对象上使用 read() 方法。

获取目录的方法:

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

撰写回答