我正在尝试使用 python 请求下载文件。它在 python 2.7 中工作,但现在不行。我真的很困惑,必须有一个更简单的答案。由于文件可能非常大,我真的想要一个进度条,我正在使用 python procressbar 来完成这项工作。
r = requests.get(file_url, data={'track': 'requests'})
size = int(r.headers['Content-Length'].strip())
self.bytes = 0
widgets = [name, ": ", Bar(marker="|", left="[", right=" "),
Percentage(), " ", FileTransferSpeed(), "] ",
self,
" of {0}MB".format(round(size / 1024 / 1024, 2))]
pbar = ProgressBar(widgets=widgets, maxval=size)
pbar.start()
file = b""
for chunk in r.iter_content()
if chunk:
file += chunk
self.bytes += 1
pbar.update(self.bytes)
我发现使用 iter_content 是获得持续更新的最佳方式。我确实尝试过 iter_lines 但它弄乱了文件。它突然停止下载,非常慢,下载10%需要15分钟,然后停止。并且尝试以字节模式打开文件并写入它是行不通的,它根本不会引发错误。当我尝试打印块包含的内容时
print(chunk.decode("utf-8")
有效,但只有几个字符。在某些时候它抱怨
UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
即使在 iter_content 中使用“decode_unicode=True”也无济于事。我很困惑,不知道该怎么办。使用 Py3k 应该不难。