2010-02-18 57 views
7

我在尝试使用urllib从ftp census站点下载zip文件(“tl_2008_01001_edges.zip”)。当我得到它时,压缩文件的格式是什么,如何保存?Python和urllib

我对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 site列表运行?

谢谢。

回答

8

使用urllib2.urlopen()的zip文件数据目录列表。

要使用zipfile模块处理zip文件,可以将它们写入磁盘文件,然后将其传递给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 
+0

非常感谢 - 这解释了我需要做的事情。我现在很高兴地用这个下载几百个文件。 – djq 2010-02-18 18:59:33

3

the docsurlretrieve将该文件放入磁盘并返回一个元组(filename, headers)。因此,当urlretrieve返回时,该文件已保存。

您可以使用标准库的zipfile模块打开并读取您检索的ZIP文件。 glob不能在zipfiles内工作,只能在正常的文件系统目录下工作。

+1

谢谢你 - 所以,如果我使用urllib.urlretrieve(“ftp://ftp2.census.gov/geo/ tiger/TIGER2008/01_ALABAMA/01001_Autauga_County/tl_2008_01001_edges.zip“,”F://“),将它保存到我的F驱动器中?关于我的问题,我不是很清楚;我想知道如何通过站点上的ftp文件夹列表来循环,而不是在zip文件中。 – djq 2010-02-18 15:42:42

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

谢谢 - 这解释了我需要如何去保存zipfile对象,这非常有用 – djq 2010-02-18 19:00:08