写文件只下载1k

时间:2013-09-13 08:55:45

标签: python file-io urllib

有谁可以告诉我为什么它只下载1k字节的图像(当我使用urlretrieve()时同样的问题)?图像的大小比这大得多。

f = open('00000001.gif','wb')
f.write(urllib.urlopen('http://gifs.gifbin.com/082013/tn_1378920172_decapitated_snake_bites_itself.gif').read())
f.close()

2 个答案:

答案 0 :(得分:0)

您需要验证您的网络或您尝试检索的网址; Python将从结果套接字中读取,直到达到EOF,因此如果您获得的数据少于预期,则会发送一个不完整的响应,网络会将响应缩短(代理服务器,防火墙,你有什么),或者你的假设关于服务器为该URL发送的内容是错误的。

您还想使用shutil.copyfileobj()为您进行阅读:

from shutil import copyfileobj

im = urllib.urlopen('http://gifs.gifbin.com/082013/tn_1378920172_decapitated_snake_bites_itself.gif')
with open('00000001.gif', 'wb') as out:
    copyfileobj(im, out)

这不仅会处理以块为单位读取数据,还会避免使用大量二进制数据填充内存来启动。 with语句处理为您关闭文件对象。

答案 1 :(得分:-1)

只需将read()更改为read(-1)。