这里介绍一些场景的进度的应用工具,主要是针对那些不知道什么时候能够完全运行完毕的命令准备的,首先是进度条工具。
tqdm
python库最常用的进度条
from tqdm import tqdm
import time
# 示例:遍历自动驾驶数据集的帧数据
frame_ids = range(1000) # 模拟1000帧数据
# 方式1:直接包装迭代器
for frame_id in tqdm(frame_ids, desc="Loading dataset frames"):
# 模拟帧数据加载耗时
time.sleep(0.005)

更加常用的是手动去更新进度条,此时我们需要先初始化进度条。
from tqdm import tqdm
import time
epochs = 10
total_steps = 100
pbar = tqdm(total=epochs * total_steps, desc="Training Model")
for epochs in range(epochs):
for step in range(total_steps):
time.sleep(0.01)
par.update(1)
par.clear()

嵌套进度条,我们也按照提前定义进度条的形式来管理,假设一个任务是多层任务,需要处理5个数据片段,每个片段有200个条数据。
from tqdm import tqdm
import time
seq = 5
frame_ids = 200
bar_seq = tqdm(total=seq, desc="Processing Sequences")
for i in range(seq):
bar_frame = tqdm(total=frame_ids, desc=f"Seq {i+1} Processing frames", leave=False) # 需要再for里面定义,并且加入leave=False
for i in range(frame_ids):
time.sleep(0.01)
bar_frame.update(1)
bar_frame.clear() # 需要额外清理内层进度条
bar_seq.update(1)

rich
嵌套效果,从视觉效果来看算是两种风格。都是可以用的,用法上其实tqdm更简单点。
from rich.progress import Progress
import time
# 你的原始参数:5个序列,每个序列200帧
seq = 5
frame_ids = 200
# 1. 创建rich进度条对象,自动管理所有进度条
with Progress() as progress:
# 2. 添加【外层进度条】:处理序列
task_seq = progress.add_task("[cyan]Processing Sequences", total=seq)
# 3. 遍历每个序列
for seq_idx in range(seq):
# 4. 添加【内层进度条】:处理当前序列的帧,每轮序列创建一个,自动刷新
task_frame = progress.add_task(f"[green]Seq {seq_idx+1} | Processing Frames", total=frame_ids)
# 遍历当前序列的所有帧
for _ in range(frame_ids):
time.sleep(0.005) # 模拟帧处理耗时,和你之前一致
progress.update(task_frame, advance=1) # 内层帧进度+1
# 内层帧进度完成后,自动清理该行,不刷屏
progress.remove_task(task_frame)
# 外层序列进度+1
progress.update(task_seq, advance=1)

pv
这里着重介绍的是pv工具,首先是批量解压,常见的压缩包括tgz,tar.gz
先安装一下
sudo apt install pv
然后进行批量解压缩(主要是对于下载的数据集来说)
# tgz
for f in *.tgz; do if [ -f "$f" ]; then echo "正在解压:$f,实时统计中..."; pv "$f" | tar -zxf - -C ./; fi; done
# tar.gz
for f in *.tar.gz; do if [ -f "$f" ]; then echo "正在解压:$f,实时统计中..."; pv "$f" | tar -zxf - -C ./; fi; done


解压单个文件:
pv -ptebr openscene_metadata_trainval.tgz | tar -zxf - -C ./
除了解压之外,还有一些其他的用途如下
✅ 用pv的场景:Linux 命令行、文件压缩解压、拷贝传输、网络下载、硬盘测速(所有管道数据流场景)。
这里暂时就不展开说明了。
艺术字打印
之前使用modelscope下载模型的时候发现它的打印内容如下:

以为是通过什么库实现的,但是查了一下源码发现,就是直接定义的ASSIC码:

不过也找到了对应的python库pyfiglet,以下是一些常见的用法:
pip install pyfiglet termcolor rich
#pip install pyfiglet
import pyfiglet
# 默认字体
text = pyfiglet.figlet_format("ModelScope")
# print(text)
import pyfiglet
# # 尝试 'slant' 字体 (非常常用)
# print(pyfiglet.figlet_format("ModelScope", font='slant'))
# # 尝试 'banner3-D' 字体
# print(pyfiglet.figlet_format("ModelScope", font='banner3-D'))
# # 尝试 'doh' 字体
# print(pyfiglet.figlet_format("ModelScope", font='doh'))
import pyfiglet
# print(pyfiglet.FigletFont.getFonts())
import pyfiglet
# === 极小字体 (Height: 1) ===
# 适合放在注释或者紧凑的地方
print("--- Small ---")
print(pyfiglet.figlet_format("ModelScope", font='mini'))
print(pyfiglet.figlet_format("ModelScope", font='digital'))
# === 中等字体 (Height: 4-6, 标准大小) ===
# 'standard', 'slant', 'shadow' 是最常用的
print("--- Medium ---")
print(pyfiglet.figlet_format("ModelScope", font='slant'))
# === 巨大字体 (Height: >10) ===
# 这种字体非常大,需要终端全屏才能看清
print("--- Large ---")
print(pyfiglet.figlet_format("ModelScope", font='starwars'))
print(pyfiglet.figlet_format("ModelScope", font='doh')) # ModelScope 类似的风格
print(pyfiglet.figlet_format("ModelScope", font='block'))
import pyfiglet
from termcolor import colored, cprint
ascii_art = pyfiglet.figlet_format("ModelScope", font='slant')
# 1. 简单的红色
print(colored(ascii_art, 'red'))
# 2. 蓝色带加粗
print(colored(ascii_art, 'blue', attrs=['bold']))
# 3. 红底白字 (高亮)
print(colored(ascii_art, 'white', 'on_red'))
import pyfiglet
from rich import print
from rich.panel import Panel
from rich.text import Text
# 生成 ASCII 文本
art_str = pyfiglet.figlet_format("ModelScope", font='slant')
clean_art = art_str.rstrip()
# 或者用 Text 包装更安全,防止字符解析错误
art_text = Text(clean_art, style="bold green")
# 1. 直接打印带颜色的 (支持 bold, italic, 颜色代码)
print(f"[bold magenta]{art_str}[/bold magenta]")
# 2. 放在一个边框里 (Panel)
print(Panel(f"[green]{art_str}[/green]", title="Welcome", subtitle="v1.0"))
print(Panel(art_str, title="Welcome", subtitle="v1.0", expand=False))
print(Panel(art_text, expand=False))




4731



被折叠的 条评论
为什么被折叠?



