为啥每次迭代我的 tqdm 进度条都显示在新行上?
Posted
技术标签:
【中文标题】为啥每次迭代我的 tqdm 进度条都显示在新行上?【英文标题】:Why does my tqdm progress bar display on a new line for every iteration?为什么每次迭代我的 tqdm 进度条都显示在新行上? 【发布时间】:2020-06-24 10:44:59 【问题描述】:我正在从事一个个人项目,我使用请求从网站获取数据。其中一个文件非常大,所以我想包含一个进度条作为“生命迹象”。
虽然我基于 tqdm 文档中的示例,但下载位有效,但进度条不断输出新行。
代码如下:
def download_data() -> BinaryIO:
"""Download the two zipped data packages
from the Open Power System Data website.
Returns
-------
BinaryIO
Saves the two packages in Data/Raw
"""
urls = [GENERATION_CAPACITY_URL, TIME_SERIES_URL]
for url in urls:
# Gets the filename directly from the url, saves us having to name it
url_filename = Path(urlparse(url).path).name
# Check if exists before doing lengthy download
if not Path.exists(RAW_DATA / url_filename):
# Stream = True because files are quite large
with requests.get(url, stream=True) as response:
# Check connection first, will raise HTTPError if bad
response.raise_for_status()
chunk_size = 1024 * 1024
print(f"Downloading url_filename")
with open(RAW_DATA / url_filename, "wb") as f:
with tqdm(
unit="B",
unit_scale=True,
unit_divisor=1024,
total=int(response.headers.get("content-length", 0)),
) as pbar:
for chunk in response.iter_content(chunk_size=chunk_size):
f.write(chunk)
pbar.update(len(chunk))
else:
print(f"File: url_filename already exists")
我在 name == main 条件中调用下面的函数(为清楚起见未显示)
当我运行文件时,我会看到一个进度条,该进度条会随着文件下载而更新,但每次更新似乎都会在新行上呈现一个新进度条,而不是一个永久进度条,该进度条只是沿着屏幕移动(如你会期望的)
即而不是:
[|||||| 3%]
我明白了
[| 1%]
[| 1%]
[|| 2%]
[||| 3%]
一直不停,直到完成。
不确定我是否做错了什么,我就是想不通!
【问题讨论】:
【参考方案1】:你需要输入leave=True
关键字
with tqdm(unit="B", unit_scale=True, unit_divisor=1024, total=int(response.headers.get("content-length", 0)),leave=True ) 作为 pbar:
【讨论】:
以上是关于为啥每次迭代我的 tqdm 进度条都显示在新行上?的主要内容,如果未能解决你的问题,请参考以下文章