tqdm, pyyaml, traceback的使用
Posted jclian91
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tqdm, pyyaml, traceback的使用相关的知识,希望对你有一定的参考价值。
??本文将会介绍3个Python第三方模块的使用方法,它们分别是tqdm
, pyyaml
和traceback
模块,各自的用途描述如下:
tqdm
: 可以显示循环的进度条;pyyaml
:Python操作YAML文件的库;tracebak
:详细追踪错误信息的库。
??下面将会给出这3个模块的简单介绍和使用。
tqdm
??tqdm是Python中可以显示循环的进度条模块,tqdm()可以直接包裹iterable的对象。如果我们需要显示程序处理的进度条时,我们可以使用该模块。
??下面将给出几个简单使用tqdm的例子。
??例子1:直接使用进度条,示例程序如下:
# -*- coding: utf-8 -*-
import time
from tqdm import tqdm
for i in tqdm(range(100)):
time.sleep(0.01)
输出结果如下:
100%|██████████| 100/100 [00:01<00:00, 91.52it/s]
??例子2:在处理进度条的同时,输出额外的处理信息,示例程序如下:
# -*- coding: utf-8 -*-
import time
from tqdm import tqdm
pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:
pbar.set_description("Processing %s" % char)
time.sleep(1)
输出如下:
Processing d: 100%|██████████| 4/4 [00:04<00:00, 1.00s/it]
??例子3:人工控制进度条的进度,示例代码如下(为了演示效果,进度条没有100%):
# -*- coding: utf-8 -*-
import time
from tqdm import tqdm
with tqdm(total=100) as pbar:
for i in range(5):
time.sleep(0.5)
pbar.update(10)
输出如下:
50%|█████ | 50/100 [00:02<00:02, 19.89it/s]
??更多的内容请参考tqdm
模块的官网:https://pypi.org/project/tqdm/ 。
pyyaml
?&emsop;YAML
是数据序列化格式,便于人的阅读和交互,与JSON
类似,常用于配置文件。pyyaml
是Python用于操作YAML
文件的模块,支持常见的读写操作。
??例子1:YAML文件写入,示例代码如下:
# -*- coding: utf-8 -*-
import yaml
json_data = {'name': 'Alice',
'age': 1956,
'job': ['Doctor', 'Driver', 'Worker']
}
# 输出
y = yaml.dump(json_data, default_flow_style=False).encode('utf-8').decode('unicode_escape')
print(y)
# 写入到YAML文件
with open('./alice.yaml', 'w') as f:
y = yaml.dump(json_data, f)
输出结果如下(同时也会生成alice.yaml文件,内容一致):
age: 1956
job:
- Doctor
- Driver
- Worker
name: Alice
??例子2:读取YAML文件,示例代码如下:
# -*- coding: utf-8 -*-
import yaml
with open("./alice.yaml", 'r', encoding='utf-8') as ymlfile:
cfg = yaml.safe_load(ymlfile)
print(cfg)
输出结果如下:
{'age': 1956, 'job': ['Doctor', 'Driver', 'Worker'], 'name': 'Alice'}
??YAML
文件的输出有其自身的规范,总结如下:
1、大小写敏感
2、使用缩进表示层级关系
3、缩进时不允许使用Tab键,只允许使用空格。
4、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
5、# 表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
6、列表里的项用"-"来代表,字典里的键值对用":"分隔
??更多关于pyyaml
的内容,可以参考网址:https://pyyaml.org/wiki/PyYAMLDocumentation 。
traceback
??traceback
模块提供了一个标准接口,用于提取,格式化和打印Python程序的堆栈跟踪。它在打印堆栈跟踪时完全模仿了Python解释器的行为。简单来说,这个模块可以详细跟踪错误的信息,并能格式化输出,这在程序调试时会很有用。
??用try...except...
机制,我们可以捕捉到错误,但不会有详细的错误信息,比如下面的程序:
# -*- coding: utf-8 -*-
try:
result = '1' + 2
print(result)
except Exception as err:
print(err)
程序的输出如下:
must be str, not int
该输出只告诉我们错误的内容,但是没有告诉我们错在哪里,详细的信息是什么,这样的处理方式在项目中普遍存在的话,那么项目的开发简直就是个灾难。
??那么,换成traceback会有什么变化呢?
# -*- coding: utf-8 -*-
import traceback
try:
result = '1' + 2
print(result)
except Exception as err:
print(traceback.format_exc())
输出结果如下:
Traceback (most recent call last):
File "/Users/Jclian91/PycharmProjects/demo/delete.py", line 7, in <module>
result = '1' + 2
TypeError: must be str, not int
该输出告诉我们程序的第7行出错,以及具体的错误信息,这对程序的开发很有帮助。
??本次分享较为简单,希望能对读者有用。
??本次分享到此结束,感谢大家阅读~
以上是关于tqdm, pyyaml, traceback的使用的主要内容,如果未能解决你的问题,请参考以下文章