首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中使用urllib2。如何获取正在下载的文件的名称?

在Python中使用urllib2。如何获取正在下载的文件的名称?
EN

Stack Overflow用户
提问于 2011-04-04 10:00:10
回答 4查看 10.6K关注 0票数 6

我是python初学者。我正在使用urllib2下载文件。当我下载一个文件时,我会指定一个文件名,用来将下载的文件保存到我的硬盘上。但是,如果我使用浏览器下载该文件,则会自动提供默认文件名。

以下是我的代码的简化版本:

代码语言:javascript
运行
复制
def downloadmp3(url):
    webFile = urllib2.urlopen(url)
    filename = 'temp.zip'
    localFile = open(filename, 'w')
    localFile.write(webFile.read())

文件下载得很好,但是如果我在浏览器中输入存储在变量"url“中的字符串,当我下载它时,会有一个默认的文件名。我想对我下载的文件使用这个文件名,而不是'temp.zip‘或者我分配给它的任何东西。

如何使用urllib2 (或其他Python库)将文件保存为我要从其下载的服务器所使用的文件名?

如果有人不理解这个问题,请说出来,这样我就可以把它说得更清楚一些。

EN

回答 4

Stack Overflow用户

发布于 2011-04-04 10:05:03

文件名通常由服务器通过content-disposition标头包含:

代码语言:javascript
运行
复制
content-disposition: attachment; filename=foo.pdf

您可以通过以下方式访问标头

代码语言:javascript
运行
复制
result = urllib2.urlopen(...)
result.info() <- contains the headers


i>>> import urllib2
ur>>> result = urllib2.urlopen('http://zopyx.com')
>>> print result
<addinfourl at 4302289808 whose fp = <socket._fileobject object at 0x1006dd5d0>>
>>> result.info()
<httplib.HTTPMessage instance at 0x1006fbab8>
>>> result.info().headers
['Date: Mon, 04 Apr 2011 02:08:28 GMT\r\n', 'Server: Zope/(unreleased version, python 2.4.6, linux2) ZServer/1.1 Plone/3.3.4\r\n', 'Content-Length: 15321\r\n', 'Content-Type: text/html; charset=utf-8\r\n', 'Via: 1.1 www.zopyx.com\r\n', 'Cache-Control: max-age=3600\r\n', 'Expires: Mon, 04 Apr 2011 03:08:28 GMT\r\n', 'Connection: close\r\n']

看见

http://docs.python.org/library/urllib2.html

但请注意,此标头不需要存在。否则,您需要自己从请求的URL生成一个合理的名称-例如,从URI的最后一个组件。在本例中使用Python的urlparse()方法。

票数 8
EN

Stack Overflow用户

发布于 2015-05-11 14:20:29

我对前面的回答的问题是,他们使用的是原始URL,这在重定向的情况下将失败。我是这样做的:(请注意使用result.url而不是url)

代码语言:javascript
运行
复制
import os
import urllib2
result = urllib2.urlopen(url)
filename = os.path.basename(urllib2.urlparse.urlparse(result.url).path)
票数 1
EN

Stack Overflow用户

发布于 2011-04-04 10:05:48

您可以使用urlretrieve来完成此操作:

http://docs.python.org/library/urllib.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5533880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档