054. 编写一个函数,实现简单的命令行进度条
在Python中,可以通过简单的打印操作来实现一个命令行进度条。以下是一个实现简单命令行进度条的函数,它可以在执行任务时动态显示进度。
示例代码
import time
import sys
def progress_bar(total_steps, prefix="", suffix="", decimals=1, length=50, fill="█"):
"""
简单的命令行进度条
:param total_steps: 总步骤数
:param prefix: 进度条前缀
:param suffix: 进度条后缀
:param decimals: 显示的进度小数位数
:param length: 进度条长度(字符数)
:param fill: 进度条填充字符
"""
def print_progress(iteration):
"""
打印进度条
:param iteration: 当前步骤
"""
percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total_steps)))
filled_length = int(length * iteration // total_steps)
bar = fill * filled_length + '-' * (length - filled_length)
sys.stdout.write(f"\r{prefix} |{bar}| {percent}% {suffix}")
sys.stdout.flush()
# 初始化进度条
print_progress(0)
for i in range(total_steps):
time.sleep(0.1) # 模拟任务执行时间
print_progress(i + 1)
print() # 结束后换行
# 示例用法
if __name__ == "__main__":
progress_bar(100, prefix="进度:", suffix="完成", length=50)
代码说明:
参数说明:
-
total_steps
:总步骤数,表示任务的总进度。 -
prefix
:进度条前缀,用于显示进度条的描述信息。 -
suffix
:进度条后缀,用于显示额外的信息。 -
decimals
:进度百分比的小数位数。 -
length
:进度条的长度(以字符数表示)。 -
fill
:进度条的填充字符,默认为█
。
print_progress
函数:
-
计算当前进度的百分比。
-
根据当前进度计算填充长度。
-
使用
\r
(回车符)在同一行更新进度条。 -
使用
sys.stdout.write
和sys.stdout.flush
确保进度条能够实时更新。
模拟任务执行:
-
在
for
循环中,每次循环模拟任务的执行(这里用time.sleep(0.1)
模拟)。 -
每次循环调用
print_progress
函数更新进度条。
结束换行:
- 任务完成后,通过
print()
换行,避免进度条与后续输出混在一起。
示例运行
运行代码后,你将在命令行中看到类似以下的动态进度条:
进度: |██████████████████████████████████████████████████████████████████████████| 100.0% 完成
扩展功能
如果你需要更复杂的进度条功能,比如支持多线程任务、更丰富的样式等,可以使用第三方库,如tqdm
。以下是一个使用tqdm
的简单示例:
pip install tqdm
from tqdm import tqdm
import time
# 示例用法
for i in tqdm(range(100), desc="进度", unit="step"):
time.sleep(0.1) # 模拟任务执行时间
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)