如何用Python下载tar包?
我正在尝试下载一个压缩包(tarball),方法是先下载里面的内容,然后把这些内容写入一个文件。我的代码大概是这样的:
from urllib import urlretrieve
contents = urlretrieve('http://example.com/file.tgz')
open('/tmp/my-tar.tgz', 'w').write(contents)
但是,当我这样做的时候,我遇到了一个错误(TypeError
),提示说“期望一个字符缓冲区对象”,这个错误出现在调用write
的时候。
我该如何把压缩包的内容写入一个文件呢?
1 个回答
4
urllib.urlretrieve(url[, filename[, reporthook[, data]]])
这个函数的作用是把一个通过URL指定的网络对象复制到本地文件。如果这个URL指向的是本地文件,或者已经有一个有效的缓存副本存在,那么就不会进行复制。它会返回一个元组(filename, headers),其中filename是你可以在本地找到的文件名,headers是通过urlopen()方法获取的对象信息(对于远程对象,可能是缓存的)。异常处理和urlopen()是一样的。
write
函数出错了,因为它期待得到你想写入的内容,但实际上它得到了一个(filename, headers)的元组。
修正后的版本:
from urllib import urlretrieve
filename, headers = urlretrieve('http://example.com/file.tgz', '/tmp/my-tar.tgz')