【问题标题】:Python and urllibPython 和 urllib
【发布时间】:2010-02-18 15:31:50
【问题描述】:

我正在尝试使用 urllib 从 ftp census 站点下载 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 site 列表吗?

谢谢。

【问题讨论】:

    标签: python urllib2 urllib


    【解决方案1】:

    使用urllib2.urlopen() 作为压缩文件数据目录列表。

    要使用 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
    

    【讨论】:

    • 非常感谢 - 这正是我需要做的。我现在很高兴使用它下载数百个文件。
    【解决方案2】:
    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())
    

    【讨论】:

    • 谢谢 - 这解释了我需要如何保存 zipfile 对象,这非常有用
    【解决方案3】:

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

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

    【讨论】:

    • 谢谢 - 所以如果我使用 urllib.urlretrieve("ftp2.census.gov/geo/tiger/TIGER2008/01_ALABAMA/…", "F://") 将它保存到我的 F 驱动器?关于我的全局问题,我不是很清楚;我想知道如何循环浏览网站上的 ftp 文件夹列表,而不是在 zip 文件中。
    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2016-03-11
    • 2011-07-07
    相关资源
    最近更新 更多