Python控制台进度图神器(python控制台在哪)
off999 2024-09-14 07:16 97 浏览 0 评论
前言
有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事。
tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持windows、Linux、mac等系统,支持循环处理、多进程、递归处理、还可以结合linux的命令来查看处理情况、结合pandas,等进度展示。
大家先看看tqdm的进度条效果
安装
github地址:https://github.com/tqdm/tqdm
想要安装tqdm也是非常简单的,通过pip或conda就可以安装,而且不需要安装其他的依赖库
pip安装
pip install tqdm
conda安装
conda install -c conda-forge tqdm
迭代对象处理
对于可以迭代的对象都可以使用下面这种方式,来实现可视化进度,非常方便
from tqdm import tqdm import time for i in tqdm(range(100)): time.sleep(0.1) pass
在使用tqdm的时候,可以将tqdm(range(100))替换为trange(100)代码如下
from tqdm import tqdm,trange import time for i in trange(100): time.sleep(0.1) pass
观察处理的数据
通过tqdm提供的set_description方法可以实时查看每次处理的数据
from tqdm import tqdm
import time
pbar = tqdm(["a","b","c","d"])
for c in pbar:
time.sleep(1)
pbar.set_description("Processing %s"%c)
手动设置处理的进度
通过update方法可以控制每次进度条更新的进度
from tqdm import tqdm import time #total参数设置进度条的总长度 with tqdm(total=100) as pbar: for i in range(100): time.sleep(0.05) #每次更新进度条的长度 pbar.update(1)
除了使用with之外,还可以使用另外一种方法实现上面的效果
from tqdm import tqdm import time #total参数设置进度条的总长度 pbar = tqdm(total=100) for i in range(100): time.sleep(0.05) #每次更新进度条的长度 pbar.update(1) #关闭占用的资源 pbar.close()
linux命令展示进度条
不使用tqdm
$ time find . -name '*.py' -type f -exec cat \{} \; | wc -l
857365
real 0m3.458s
user 0m0.274s
sys 0m3.325s
使用tqdm
$ time find . -name '*.py' -type f -exec cat \{} \; | tqdm | wc -l
857366it [00:03, 246471.31it/s]
857365
real 0m3.585s
user 0m0.862s
sys 0m3.358s
指定tqdm的参数控制进度条
$ find . -name '*.py' -type f -exec cat \{} \; |
tqdm --unit loc --unit_scale --total 857366 >> /dev/null
100%|███████████████████████████████████| 857K/857K [00:04<00:00, 246Kloc/s]
$ 7z a -bd -r backup.7z docs/ | grep Compressing |
tqdm --total $(find docs/ -type f | wc -l) --unit files >> backup.log
100%|███████████████████████████████▉| 8014/8014 [01:37<00:00, 82.29files/s]
自定义进度条显示信息
通过set_description和set_postfix方法设置进度条显示信息
from tqdm import trange
from random import random,randint
import time
with trange(100) as t:
for i in t:
#设置进度条左边显示的信息
t.set_description("GEN %i"%i)
#设置进度条右边显示的信息
t.set_postfix(loss=random(),gen=randint(1,999),str="h",lst=[1,2])
time.sleep(0.1)
from tqdm import tqdm
import time
with tqdm(total=10,bar_format="{postfix[0]}{postfix[1][value]:>9.3g}",
postfix=["Batch",dict(value=0)]) as t:
for i in range(10):
time.sleep(0.05)
t.postfix[1]["value"] = i / 2
t.update()
多层循环进度条
通过tqdm也可以很简单的实现嵌套循环进度条的展示
from tqdm import tqdm import time for i in tqdm(range(20), ascii=True,desc="1st loop"): for j in tqdm(range(10), ascii=True,desc="2nd loop"): time.sleep(0.01)
在pycharm中执行以上代码的时候,会出现进度条位置错乱,目前官方并没有给出好的解决方案,这是由于pycharm不支持某些字符导致的,不过可以将上面的代码保存为脚本然后在命令行中执行,效果如下
多进程进度条
在使用多进程处理任务的时候,通过tqdm可以实时查看每一个进程任务的处理情况
from time import sleep
from tqdm import trange, tqdm
from multiprocessing import Pool, freeze_support, RLock
L = list(range(9))
def progresser(n):
interval = 0.001 / (n + 2)
total = 5000
text = "#{}, est. {:<04.2}s".format(n, interval * total)
for i in trange(total, desc=text, position=n,ascii=True):
sleep(interval)
if __name__ == '__main__':
freeze_support() # for Windows support
p = Pool(len(L),
# again, for Windows support
initializer=tqdm.set_lock, initargs=(RLock(),))
p.map(progresser, L)
print("\n" * (len(L) - 2))
pandas中使用tqdm
import pandas as pd import numpy as np from tqdm import tqdm df = pd.DataFrame(np.random.randint(0, 100, (100000, 6))) tqdm.pandas(desc="my bar!") df.progress_apply(lambda x: x**2)
递归使用进度条
下面的代码是实现递归遍历文件夹
from tqdm import tqdm
import os.path
def find_files_recursively(path, show_progress=True):
files = []
# total=1 assumes `path` is a file
t = tqdm(total=1, unit="file", disable=not show_progress)
if not os.path.exists(path):
raise IOError("Cannot find:" + path)
def append_found_file(f):
files.append(f)
t.update()
def list_found_dir(path):
"""returns os.listdir(path) assuming os.path.isdir(path)"""
try:
listing = os.listdir(path)
except:
return []
# subtract 1 since a "file" we found was actually this directory
t.total += len(listing) - 1
# fancy way to give info without forcing a refresh
t.set_postfix(dir=path[-10:], refresh=False)
t.update(0) # may trigger a refresh
return listing
def recursively_search(path):
if os.path.isdir(path):
for f in list_found_dir(path):
recursively_search(os.path.join(path, f))
else:
append_found_file(path)
recursively_search(path)
t.set_postfix(dir=path)
t.close()
return files
find_files_recursively("E:/")
注意
在使用tqdm显示进度条的时候,如果代码中存在print可能会导致输出多行进度条,此时可以将print语句改为tqdm.write,代码如下
for i in tqdm(range(10),ascii=True):
tqdm.write("come on")
time.sleep(0.1)
相关推荐
- 趣书网txt小说下载txt电子(趣书网txt电子书网站)
-
网站域名:qutxt.com 趣书网(www.qutxt.com)为广大网友提供有趣的好看的小说阅读服务,全站小说免费阅读并且无弹窗,趣书网是最值得你收藏的看小说读小说网站。...
- 电脑键盘五笔字根表(电脑键盘五笔字根表口诀)
-
五笔字根表口诀助记词(王码86版)G王旁青头戋(兼)五一F土士二干十寸雨D大犬三(羊)古石厂S木丁西A工戈草头右框七H目具上止卜虎皮J日早两竖与虫依K口与川,字根稀L田甲方框四车力M...
- itools官方下载官网(itools2.0下载)
-
itools显示无法安装驱动组件的原因和解决方法如下1、关闭程序本身自动下载驱动的进程;2、点击工具页面【已连接,无法识别】链接;3、点击方法三启动修复工具【启动修复】功能,然后点击修复等待组件修复程...
- 手机金山毒霸下载(下载一个金山毒霸)
-
1,金山毒霸的默认安装目录文件为“kingsoftantivirus”,所以安装时没有更改过安装路径的话,金山毒霸在电脑上的文件夹名称是“kingsoftantivirus”。2,金山毒霸默认安装...
- 腾讯游戏app下载(腾讯游戏app)
-
为什么电脑版的腾讯会议下载完以后就被阻止了?如果你遇到这种情况,可能是因为你的电脑上面下载的腾讯会议不是。正规渠道下载的,或者不是正版的腾讯会议,所以你下载的腾讯会议。有可能中了病毒,你可以用你的电脑...
- 亚马逊电子书免费下载网站(亚马逊电子书免费资源)
-
在亚马逊电子书停运后,你可以尝试以下方法下载小说: 1.使用其他电子书平台:有很多其他的电子书平台,如KindleUnlimited、AppleBooks、GooglePlayBo...
- 什么小说软件最全还免费(笔趣阁app下载)
-
最近新出了一个小说阅读器,好像叫新免小说阅读器,我自己也去下载了来看了一下,却是还挺不错的,总结了一下几个有点:1、完全免费,确实是免费的,没有充值的接口,问过客服也说是一款免费的软件,不像很多小说,...
- 游戏中心app(网易游戏中心app)
-
OPPO游戏中心下载游戏的方法:你可以点击顶部搜索栏输入游戏名称直接下载,也能在游戏中心的「精选」页面查看每日推荐游戏。点击「分类」筛选心仪的游戏,「排行」页面浏览热门内容。碰到喜欢的游戏,点击「安装...
-
- 迅雷播放器(迅雷播放器不支持此类视频文件怎么办)
-
特点不同、优势不同,一个是app一个是插件一、指代不同1、迅雷看看播放器:是迅雷公司出品的一款在线播放插件,采用P2P点对点传输技术,可以在线流畅观看高清晰电影。2、迅雷影音:是一款迅雷公司制作的视频播放软件,可播放各类高清视频。二、特点不...
-
2026-01-24 04:51 off999
- 浏览器在线使用(在浏览器上)
-
浏览器用法:1、打开我的电脑,在我的电脑中找到【C盘】进入到C盘文件夹中;2、在C盘文件夹中,找到【ProgramFiles(X86)】这个文件夹,进入到其中; 1、点击开始菜单,接着找...
- 斗地主网页版(欢乐斗地主网页版)
-
1.是两个版本在运行2.这是因为电脑欢乐斗地主可以有不同的版本,每个版本可能有不同的功能或者设计,所以可以同时存在多个版本在运行。3.这种情况下,可能是为了满足不同用户的需求或者提供不同的游戏体...
- 比早游戏更好的平台(早游戏相似的游戏盒)
-
你好,这边推荐你用及时用车,及时用车这款app目前挂靠在高的旗下平台。双方正在推出免佣活动。早高峰7点~9点这个时间段及时用车,这边是免收佣金的,乘客付多少,司机得多少,可以轻松跑出高额流水。其次,中...
- qq下载中心(qq下载.cn)
-
可以通过解除保护模式页面,查看QQ帐号进入保护模式的原因,及获取恢复QQ帐号正常使用的方法。1.可以在realme手机中出场自带的软件商店中搜索游戏中心下载安装即可。2.可在设置-应用-系统可卸载应...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
linux软件(linux软件图标)
-
win7系统还原步骤图解(win7还原电脑系统的步骤)
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
