0%

Python-工具模块

一些 Python 工具模块。如:

  • tqdm:终端的进度条
  • retry:重试操作
  • argparse:命令行参数与选项解析的标准模块,相比于带参数,更喜欢配置文件
  • copy:【标准库】浅层 shallow 和深层 deep 复制操作
  • locale:【标准库】Python 的国际化和本地化支持库
  • atexit:内置模块,在解释器正常终止时自动执行一些程序
  • pygments:代码高亮神器
  • http.server:【标准库】HTTP 服务器
  • turtle:【标准库】海龟绘图
  • typing:【标准库】类型标注支持
  • emoji:使用 emoji 表情
  • homeassistant:家庭自动化,智能家居必备

概述

  • 人生苦短,活用工具

tqdm

tqdm:终端的进度条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import time
from tqdm import tqdm
for i in tqdm(range(10)):
time.sleep(0.01)
from tqdm import tqdm
import time
pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:
time.sleep(0.25)
pbar.set_description("Processing {}".format(char))
with tqdm(total=200) as pbar:
for i in range(20):
pbar.update(10)
time.sleep(0.1)

retry

retry:重试操作

1
2
3
4
5
from retry import retry
@retry(tries=5, delay=2)
def do_something():
xxx
do_something()

argparse

argparse:命令行参数与选项解析的标准模块,相比于带参数,更喜欢配置文件

  • 用户友好,为程序进程进行参数定义,解析 sys.argv,自动生成帮助及错误参数提示。
  • optional arguments:- 短参数,– 长参数,解析后值保存在 args.verbosity 中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import argparse

# 创建 ArgumentPArser 对象
parser= argparse.ArgumentParser(description='argparse test')
# 定位参数,不加将报错
# add_argument:添加命令行选项和参数。该方法有多个参数,包括dest用于指定选项的名称,action用于指定选项的行为(如存储一个值或调用一个函数),default用于指定选项的默认值等。
parser.add_argument("name",help="int 测试") # 定位参数,不加将报错

parser.add_argument("-age",help="年龄信息") # 可选参数,action 不需要指定参数值
# -v 是输入模式的,verbosity 是代码中用到的
parser.add_argument('-v','--verbosity',type=int,required=True,help='版本号',default="1")
parser.add_argument('-gender','--gender',help='性别',choices=["男",'女'])
# 可选值 choice=[]
args=parser.parse_args()
args = vars(parser.parse_args())
# 使用
path=args["picture_path"]
# 互斥参数
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--version1", action="store_true")
group.add_argument("-vv", "--version2", action="store_true")

print("name:",args.name,"age:",args.age,"v:",args.verbosity,"gender:",args.gender)

# python test.py name 'chen'
1

ArgumentParser 说明:

  • prog:即运行程序的名称,默认取 sys.argv[0] 的值,可以修改为指定的名称
  • usage:指定 usage 信息的内容及格式,默认是根据你添加的信息自动生成的,可以自定义修改为指定的内容
  • description:这个程序的功能概述
  • epilog:在整个帮助信息最后添加的附加信息
  • parents:用于定义一些公共的信息供子类调用
  • formatter_class:整个信息的类定义,主要包含三个类,每个类的功能如下:
  • class argparse.RawDescriptionHelpFormatter # 如何显示文本描述
  • class argparse.RawTextHelpFormatter # 如何显示文本描述
  • class argparse.ArgumentDefaultsHelpFormatter # 自定添加参数信息
  • prefix_chars:自定义参数个前缀类型
    fromfile_prefix_chars:指定文件替代命令行输入参数的方式
    argument_default:
    conflict_handler:检测是否存在相同的参数选项,不加该参数直接报错,添加该参数可以兼容(conflict_handler=’resolve’)
    add_help: 设置是否显示帮助信息那表之类(默认显示)
    parser.add_argument 参数
    parser.add_argument() 方法用于向 ArgumentParser 对象中添加一个命令行参数。该方法的常用参数如下:
  • name or flags:表示参数的名称或缩写形式,可以是一个字符串或一个字符串列表。当使用字符串时,表示参数的名称,当使用字符串列表时,列表中的第一个元素表示参数的缩写形式,第二个元素表示参数的名称。
  • action:表示参数的动作类型,可以是一个字符串或一个 Action 对象。常用的字符串类型包括 ‘store’(存储参数值)、’store_true’(存储 True)、’store_false’(存储 False)、’append’(将多个参数值存储到列表中)等。Action 对象可以自定义参数处理方式,例如 store_const、count、help 等。
  • nargs:表示参数的数量,可以是一个整数、’?’、’‘ 或 ‘+’。其中,整数表示参数的数量,’?’ 表示参数可以出现 0 次或 1 次,’‘ 表示参数可以出现任意次数,’+’ 表示参数至少出现一次。
  • const:表示使用 store_const 动作类型时的常量值。
  • default:表示参数的默认值。
  • type:表示参数值的类型,可以是一个类型函数或一个字符串。常用的类型函数包括 int、float、str、bool 等,当使用字符串时,表示使用内置的类型函数进行类型转换。
  • choices:表示参数值的可选项,只有在可选项中的值才是合法的。
  • required:表示参数是否是必选的。
  • help:表示参数的帮助信息,当用户使用 –help 或 -h 参数时,会显示该信息。
  • metavar:表示参数值在帮助信息中的显示名称,默认为参数的名称大写。
    parser.add_subparsers() 方法用于向 ArgumentParser 对象中添加一个子命令字典,该字典包含多个子命令及其参数。该方法的常用参数如下:
  • title:表示子命令字典的标题,一般用于打印帮助信息。
  • description:表示子命令字典的描述,一般用于打印帮助信息。
  • prog:表示子命令字典的名称,一般用于打印帮助信息。
  • parser_class:表示子命令字典使用的解析器类,一般使用默认值 argparse.ArgumentParser。
  • action:表示子命令字典的动作类型,一般使用默认值 ‘store’。
  • dest:表示子命令字典的变量名,用于保存用户选择的子命令。
  • required:表示是否必须选择一个子命令,一般使用默认值 True。
  • help:表示子命令字典的帮助信息,一般用于打印帮助信息。

copy

copy:【标准库】浅层 shallow 和深层 deep 复制操作

1
2
3
4
import copy

list1 = [1,2,3]
list2 = copy.deepcopy(list1)

locale

locale:【标准库】Python 的国际化和本地化支持库

  • 提供处理依赖于用户语言和位置的相关操作,
1
2
3
4
import locale
locale.setlocale(locale.LC_ALL,'')
for env_name in ['LC_ALL','LC_CTYPE','LANG','LANGUAGE']:
print(f'{env_name}={os.environ.get(env_name,"")}')

atexit

atexit:内置模块,在解释器正常终止时自动执行一些程序

  • register 注册的相反顺序执行函数。例如注册 A、B、C,在解释器终止时按顺序 C,B,A 运行。
  • But,如果程序是非正常 crash,或者通过 os._exit() 退出,注册的退出函数将不会被调用。

装饰器方式

1
2
3
4
5
6
7
8
9
10
import  os
from atexit import register

def main():
print('Do something.')
@register
def _atexit():
print('Done.')
if __name__ == '__main__':
main()

正常函数模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2019/07/22 23:57
# @Author : wang huixi
# @File : update.py
import os
from atexit import register
def main():
print('main')

def goodbye(name, adjective):
print('Goodbye, %s, it was %s to meet you.' % (name, adjective))


# register(goodbye, 'Donny', 'nice')
# or:
# register(goodbye, adjective='nice', name='Donny')
if __name__ == '__main__':
register(goodbye, adjective='nice', name='Donny')
main()
exit(1) #程序退出
print("chegn xu")
1
2
# 删除注册的函数
atexit.unregister(func)

pygments

pygments:代码高亮神器

1
2
# test.py
print('Helloworld')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
pip install pygments
pygmentize -S default -f html > default.css #语法高亮 css
pygmentize -f html -o test.html test.py
pygmentize -f html -a .highlight -S default > highlight.css # 生成 css
from pygments.styles import STYLE_MAP

for key in STYLE_MAP.keys():
print(key)

"""
default
emacs
friendly
colorful
autumn
murphy
manni
monokai
perldoc
pastie
borland
trac
native
fruity
bw
vim
vs
tango
rrt
xcode
igor
paraiso-light
paraiso-dark
lovelace
algol
algol_nu
arduino
rainbow_dash
abap
"""
1
2
html 中引用 css
<link rel="stylesheet" href="highlight.css">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from pygments import highlight
from pygments.formatters.html import HtmlFormatter
from pygments.lexers import get_lexer_by_name
from pygments.lexers.python import PythonLexer

code = 'print("hello world")'

# 二选一即可
# lexer = PythonLexer()
lexer = get_lexer_by_name("python")

# 指定风格
formatter = HtmlFormatter(style="monokai")

# 获取 html
html = highlight(code, lexer, formatter)

print(html)
"""
<div class="highlight">
<pre>
<span></span>
<span class="k">print</span>
<span class="p">(</span>
<span class="s2">&quot;hello world&quot;</span>
<span class="p">)</span>
</pre>
</div>
"""

# 获取 css
css = formatter.get_style_defs('.highlight')
print(css)

http.server

http.server:【标准库】HTTP 服务器

turtle

turtle:【标准库】海龟绘图

typing

typing:【标准库】类型标注支持

emoji

emoji:使用 emoji 表情

1
2
3
4
5
6
import emoji
rst = emoji.emojize('Python is :thumbs_up:')
# 'Python is 👍'

rst = emoji.demojize('Python is 👍')
'Python is :thumbs_up:'

homeassistant

homeassistant:家庭自动化,智能家居必备

给博主来一杯卡布奇诺