Skip to main content

使用 argparse 解析配置文件。

项目描述



argparse使用. 解析配置文件

蟒蛇版本 PyPI 版本 代码风格:黑色

支持的文件类型

类型 读者 第三者 笔记
cfg/ini configparser 支持自定义ConfigParser阅读器
json json
toml tomli/tomllib 是/否 tomllib从 Python 3.11 内置并基于tomli
yaml pyyaml 是的

安装

pip install cargparse

基本用法

给定 config.yaml

text: hello world
number: 42

像往常一样使用argparse命令行参数!

import argparse
import cargparse
import sys

parser = argparse.ArgumentParser()
parser.add_argument('--text', type=str, required=True)
parser.add_argument('--number', type=int, required=True)
parser.add_argument('--decimal', type=float)
config = cargparse.Cargparse(parser).parse_file(sys.argv[1])
python test.py config.yaml
>> config
{'text': 'hello world', 'number': 42)
>> config.text
'hello world'
>> type(config.number)
<class 'int'>

⚠️ 阅读文档以获取有关类型验证的更多信息。

高级用法

您不限于平面层次结构。

model:
  lstm:
    input_size: 100
    hidden_size:
      - 128
      - 64
  summary: True

定义一个帮助函数来解析每个嵌套部分args,它被解释为一个字典str

from __future__ import annotations

def parse_config(filename: Path | str) -> cargparse.Namespace:

    def model_namespace(args: str) -> cargparse.Namespace:
        parser = argparse.ArgumentParser()
        parser.add_argument('--cnn', type=cnn_namespace)
        parser.add_argument('--lstm', type=lstm_namespace)
        parser.add_argument('--summary', type=cargparse.boolean)
        return cargparse.Cargparse(parser).parse_dict(args)

    def cnn_namespace(args: str) -> cargparse.Namespace:
        parser = argparse.ArgumentParser()
        parser.add_argument('--in_channels', type=int, required=True)
        parser.add_argument('--out_channels', type=int, required=True)
        parser.add_argument('--kernel_width', type=int, required=True)
        return cargparse.Cargparse(parser).parse_dict(args)

    def lstm_namespace(args: str) -> cargparse.Namespace:
        parser = argparse.ArgumentParser()
        parser.add_argument('--input_size', type=int, required=True)
        parser.add_argument('--hidden_size', type=cargparse.list_int, required=True)
        return cargparse.Cargparse(parser).parse_dict(args)

    parser = argparse.ArgumentParser()
    parser.add_argument('--model', type=model_namespace, required=True)
    return cargparse.Cargparse(parser).parse_file(filename)

if __name__ == '__main__':
    config = parse_config(filename=sys.argv[1])
>> config.model.cnn
>> config.model.lstm.hidden_units
*** AttributeError: hidden_units not in namespace: ['hidden_size', 'input_size']
>> config.model.lstm.hidden_size
[128, 64]

⚠️ 阅读文档以获取有关类型验证的更多信息。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

cargparse-0.0.9.tar.gz (6.0 kB 查看哈希)

已上传 source

内置分布

cargparse-0.0.9-py3-none-any.whl (6.5 kB 查看哈希

已上传 py3