首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python保存下载的ZIP文件

使用Python保存下载的ZIP文件
EN

Stack Overflow用户
提问于 2012-01-11 13:55:40
回答 4查看 14.7K关注 0票数 3

我正在编写一个脚本,它将自动更新已安装的Calibre版本。目前我正在下载最新的便携版本。我似乎在保存zipfile时遇到了麻烦。目前我的代码是:

代码语言:javascript
复制
import urllib2
import re
import zipfile

#tell the user what is happening
print("Calibre is Updating")

#download the page
url = urllib2.urlopen ( "http://sourceforge.net/projects/calibre/files" ).read()

#determin current version
result = re.search('title="/[0-9.]*/([a-zA-Z\-]*-[0-9\.]*)', url).groups()[0][:-1]

#download file
download = "http://status.calibre-ebook.com/dist/portable/" + result
urllib2.urlopen( download )

#save
output = open('install.zip', 'w')
output.write(zipfile.ZipFile("install.zip", ""))
output.close()
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-11 14:02:24

为此,您不需要使用zipfile.ZipFile (而且您使用它的方式以及urllib2.urlopen也有问题)。相反,您需要将urlopen结果保存在一个变量中,然后将其read并将输出写入.zip文件。尝试以下代码:

代码语言:javascript
复制
#download file
download = "http://status.calibre-ebook.com/dist/portable/" + result
request = urllib2.urlopen( download )

#save
output = open("install.zip", "w")
output.write(request.read())
output.close()
票数 7
EN

Stack Overflow用户

发布于 2012-01-11 14:28:55

还可以使用一行代码:

代码语言:javascript
复制
open('install.zip', 'wb').write(urllib.urlopen('http://status.calibre-ebook.com/dist/portable/' + result).read())

它的内存效率不是很高,但仍然可以工作。

票数 3
EN

Stack Overflow用户

发布于 2012-01-11 14:02:33

如果你只是想从网上下载一个文件,你可以使用urllib.urlretrieve

将由URL表示的网络对象复制到本地文件...

使用requests代替urllib2的示例

代码语言:javascript
复制
import requests, re, urllib

print("Calibre is updating...")
content = requests.get("http://sourceforge.net/projects/calibre/files").content

# determine current version
v = re.search('title="/[0-9.]*/([a-zA-Z\-]*-[0-9\.]*)', content).groups()[0][:-1]
download_url = "http://status.calibre-ebook.com/dist/portable/{0}".format(v)

print("Downloading {0}".format(download_url))
urllib.urlretrieve(download_url, 'install.zip')
# file should be downloaded at this point
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8814813

复制
相关文章

相似问题

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