1、argparse 库
用来保存命令行参数,主要分为三个步骤:
- 1、创建解析器
- 2、添加参数
- 3、解析参数
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='train args')
# 添加参数
parser.add_argument('--cfg_file', type=str, default=None, help='specify the config for training')
parser.add_argument('--batch_size', type=int, default=None, required=False, help='batch size for training')
parser.add_argument('--workers', type=int, default=4, help='number of workers for dataloader')
arser.add_argument('--save_to_file', action='store_true', default=False, help='')
parser.add_argument('--set', dest='set_cfgs', default=None, nargs=argparse.REMAINDER,
help='set extra config keys if needed')
"""
type: 输入参数转为xx类型
default:默认参数值
action:命令行无该参数时,默认为False,否则为True
help:提示信息
required:可选参数是否可以省略
nargs:读取的命令行参数个数
"""
# 解析参数
args = parser.parse_args()
print(args.cfg_file)
...
2、EasyDict 库
可以直接使用.
来访问字典的键值对。
>>> from easydict import EasyDict
>>> d = EasyDict({'foo':3, 'bar':{'x':1, 'y':2}})
>>> d.foo
3
>>> d.bar.x
1
>>> from easydict import EasyDict
>>> from simplejson import loads
>>> j = """{
"Buffer": 12,
"List1": [
{"type" : "point", "coordinates" : [100.1,54.9] },
{"type" : "point", "coordinates" : [109.4,65.1] },
{"type" : "point", "coordinates" : [115.2,80.2] },
{"type" : "point", "coordinates" : [150.9,97.8] }
]
}"""
>>> d = EasyDict(loads(j))
>>> d.Buffer
12
>>> d.List1[0].coordinates[1]
54.9
3、pathlib 库
不同操作系统兼容性更好
>>> from pathlib import Path
# 获取当前文件路径 .resolve()转为绝对路径
>>> Path(__file__).resolve()
/home/drl/xxx/xxx.py
# .parent相当于 cd .. 到父级路径
>>> Path(__file__).resolve().parent
/home/drl/xxx
# 使用 / 拼接路径
>>> (Path(__file__).resolve().parent / '../').resolve()
/home/drl
# 除去文件后缀
>>> Path(__file__).stem
xxx
一个经典的写法
from pathlib import Path
load_path = '~/'
str(path) for path in sorted(Path(load_path).expanduser().iterdir()) if path.suffix == '.db'
# .expanduser()展开目录
# .iterdir()获取当前文件夹下所有文件及文件夹(列表形式返回)
4、glob 库
主要是使用正则来匹配查找符合要求的文件路径。
import glob
# 查找所有的权重文件
ckpt_list = glob.glob(str(ckpt_dir / '*.pth'))
5、logging 库
记录模型日志信息
import logging
# 创建一个logger
logger = logging.getLogger('mylogger')
# 设置日志等级
logger.setLevel(logging.INFO)
# 定义handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
"""
将日志信息写入控制台
"""
console = logging.StreamHandler()
console.setLevel(logging.ERROR)
console.setFormatter(formatter) # 定义输出格式
logger.addHandler(console) # 给logger添加handler
"""
将日志信息写入文件
"""
file_handler = logging.FileHandler(filename=log_file)
file_handler.setLevel(logging.ERROR)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# 取消传播
logger.propagate = False
# 使用(写入日志记录)
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
6、vars()函数
以字典形式返回对象的属性和属性值。
>>> class Runoob:
... a = 1
...
>>> print(vars(Runoob))
{'a': 1, '__module__': '__main__', '__doc__': None}