我尝试通过下载内容然后将其写入文件来下载tarball。这基本上就是我的代码的工作方式:
from urllib import urlretrieve
contents = urlretrieve('http://example.com/file.tgz')
open('/tmp/my-tar.tgz', 'w').write(contents)
然而,当我这样做时,我收到一个错误(TypeError
),该错误表示预期字符缓冲区对象'在致电write
。
如何将tarball的内容写入文件?
答案 0 :(得分:4)
urllib.urlretrieve(url [,filename [,reporthook [,data]]])
如有必要,将URL表示的网络对象复制到本地文件。 如果URL指向本地文件或者有效的缓存副本 对象存在,不复制对象。返回一个元组(文件名, headers)其中filename是对象所在的本地文件名 可以找到,header是对象的info()方法 由urlopen()返回(对于远程对象,可能已缓存)。 例外与urlopen()相同。
write
抱怨是因为它希望获得您尝试编写的内容,但它实际上会获得(文件名,标题)元组。
修正版:
from urllib import urlretrieve
filename, headers = urlretrieve('http://example.com/file.tgz', '/tmp/my-tar.tgz')