使用Urllib2.urlopen对二进制数据失败?

时间:2009-12-30 12:24:56

标签: python download urllib2

我正在使用python以编程方式从Web服务器下载zip文件。使用网络浏览器,没关系。我写过这个(部分)脚本;

response = urllib2.urlopen(url, data, 10)
the_page = response.read()
f = open(filename, 'w')
f.write(the_page)
f.close()

请求成功,我获取数据。问题是我正在下载的文件 - 一个zip文件 - 不起作用;该文件似乎已损坏。它似乎是正确的长度,并在文本编辑器中看起来看起来像一个zip文件的内容。以下是下载的标题;

内容长度:9891 内容 - 处置:内容 - 处置:附件;文件名= “TrunkBackup_20101230.zip” 日期:2009年12月30日星期三格林威治标准时间12:22:08 Accept-Ranges:bytes

当我检查响应的长度时,它在9891是正确的。我怀疑发生了什么,当我调用response.read()时,结果是一个字符串,其中回车符'有帮'地归一化(例如,{{1到\r)。当我写文件时,二进制数据有点错误,并且zip文件已损坏。

我的问题是(A)我不确定我是否正确,(B)如果我是对的,如何保存二进制数据本身?

3 个答案:

答案 0 :(得分:9)

尝试以二进制模式打开文件:

 f = open(filename, 'wb')

答案 1 :(得分:1)

您可以使用urlretrieve function下载原始二进制文件。

答案 2 :(得分:0)

如果有人在写入模式设置为“wb”时遇到同样的错误,请确保在尝试使用该文件之前调用“f.flush()”或“f.close()”,否则可能没有写完。