2

我正在使用 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 内容处置:内容处置:附件;filename="TrunkBackup_20101230.zip" 日期:星期三,2009 年 12 月 30 日 12:22:08 GMT 接受范围:字节

当我检查响应的长度时,它在 9891 处是正确的。我怀疑发生的事情是,当我调用结果时response.read(),结果是一个字符串,其回车符“有帮助”归一化(比如\rto \n)。当我写入文件时,二进制数据略有错误,并且 zip 文件已损坏。

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

4

3 回答 3

9

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

 f = open(filename, 'wb')
于 2009-12-30T12:29:03.927 回答
1

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

于 2009-12-30T12:29:38.723 回答
0

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

于 2012-04-16T16:14:25.283 回答