如何用Python下载tar包?

3 投票
1 回答
2766 浏览
提问于 2025-04-18 18:13

我正在尝试下载一个压缩包(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')

撰写回答