我有一个简单的 tqdm
进度条和 requests
模块结合使用的代码,用于下载文件:
import requests
from tqdm import tqdm
def download_to_file(path: str, filename: str, url: str):
try:
r = requests.get(url, stream=True)
file_length = int(r.headers['Content-Length'])
chunk_size = 1024 # 1MB
num_bars = int(file_length / chunk_size)
if r.status_code == 200:
with open(f'{path}\\{filename}', 'wb+') as f:
pbar = tqdm(total=num_bars, unit='B', unit_scale=True, desc=filename, leave=False, file=sys.stdout,
unit_divisor=1024)
for chunk in r.iter_content(chunk_size=chunk_size):
if chunk:
pbar.update()
f.write(chunk)
else:
raise requests.HTTPError(f'Status code is {r.status_code}')
except Exception as ex:
print(f'[-] Failed to download \'{filename}\'! {str(ex)}')
pass
这个功能可以运行,但是进度条的显示为 file.extension: 100%|████████████▉| 123k/123k [00:58<00:00, 2.87kB/s]
,问题在于123MB的文件被显示成了123k,并且当前速度也以KB/s为单位显示。我已经尝试过将单位改为KB,但这只会导致速度变成2.87kKB/s,实际上应该是MB/s。
我尝试查找使用tqdm库的GitHub存储库,但无法找到我想要的示例。请问如何使它显示总大小为123MB,当超过1000时,速度从KB/s更改为MB/s?
file_length
没有被chunk_size
除以得到num_bars
,正如我所写的"total
是预期迭代次数,tqdm会自动调整单位"。 - gs202