tqdm, pyyaml, traceback的使用

  本文将会介绍3个Python第三方模块的使用方法,它们分别是tqdmpyyamltraceback模块,各自的用途描述如下:

  • 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 任务进度条模块