如何将python 3.6配置文件转换为argparser代码

时间:2018-11-12 16:48:04

标签: python configparser

我有一个file.conf文件,可以使用ConfigParser()加载到python中。 conf文件具有通常的格式(也使用opencv):

[decorations]
timestamp_fg= 255,255,255
timestamp_bg= 0,0,0
font_scale = 1.5

conf文件很大。我想要一种自动为ArgumentParser()生成python代码的方法,以便我可以单作者conf文件,生成一些代码,然后删除不需要的代码:

parser = argparse.ArgumentParser()
parser.add_argument("-c","--config", help="full pathname to config file", type=str)
# etc.

我没有找到这样的实用程序,但仍然只在python中使用了几个月。

2 个答案:

答案 0 :(得分:1)

虽然我不确定,但我会做两件事之一

  • 创建一个接受ConfigParser 对象的函数并将其转换为Argparse的等效对象

    • 修改工具
    • 正常运行
    • 运行魔术部分,将已解析的ConfigParser对象作为Argparse命令的大字符串转储到新文件中,以供您查看。
  • 为其编写一个正则表达式并进行直接转换

    • 编写新脚本
    • 传入配置路径
    • 运行魔术部分,将已解析的ConfigParser对象作为Argparse命令的大字符串转储到新文件中,以供您查看。

仅使用string.format()可能很好

# make a template for your Argparse options
GENERIC_COMMAND = """\
parser.add_argument(
        "--{long_name}", "-{short_name}",
        default="{default}",
        help="help_text")"""

...
# parse ConfigParser to commands
commands = [
    {
        "long_name": "argumentA",
    },
    {
        "long_name": "argumentB",
        "help_text": "Do Thing B"
    },
...
]

commands_to_write_to_file = []
for command in commands:
    try:
        commands_to_write_to_file.append(
            GENERIC_COMMAND.format(**command))  # expand command to args
    except Exception as ex:
        print("Caught Exception".format(repr(ex)))

# to view your commands, you can write commands to file
# or try your luck with the help command
with open(out.txt, "w") as fh:
    fh.write("\n\n".join(commands_to_write_to_file))

这两个都不是很好的解决方案,但是我希望它们可以轻松完成90%的工作,留下良好的日志记录,让您自己找到并转换其余的几个奇数命令。

对输出感到满意后,就可以摆脱转储逻辑,而直接用'em代替argparse参数

for command in commands:
    argparse.add_argument(**command)

答案 1 :(得分:0)

我会结帐ConfigArgParse。该库允许

  

命令行参数,配置文件,硬编码默认值以及某些情况下环境变量的组合