【问题标题】:Using Urlllib2.urlopen fails for binary data?对二进制数据使用 Urlllib2.urlopen 失败?
【发布时间】:2009-12-30 12:24:55
【问题描述】:

我正在使用 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 接受范围:字节

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

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

【问题讨论】:

  • 以二进制模式打开文件是否有效(open(filename, 'wb'))?

标签: python download urllib2


【解决方案1】:

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

 f = open(filename, 'wb')

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我在使用 urlretrieve 时遇到了问题——我的应用程序刚刚停止。不知道为什么。
    • 这很好奇......我认为 urlretrieve(url, targetpath) 对文件很好(并且可能比“url->string->file”方式快得多)。也许你可以给我看看你的代码。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-27
      • 2017-08-22
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2021-03-29
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多