Как преобразовать файл конфигурации Python 3.6 в код argparser

У меня есть файл.conf, который я загружаю в python с помощью ConfigParser(). Файл conf имеет обычный формат (также с использованием opencv):

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

Файл conf большой. Я хотел бы, чтобы был способ автоматически генерировать код Python для ArgumentParser(), чтобы я мог самостоятельно создать файл conf, генерировать некоторый код и удалять код, который мне не нужен:

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

Я не нашел такой утилиты, но все еще был в Python всего несколько месяцев.

2 ответа

Хотя я не совсем уверен, я бы сделал одну из двух вещей

  • Создайте функцию, которая принимает 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% работы будет выполнено легко, оставляя хорошую регистрацию и вы сами сможете найти и преобразовать оставшиеся несколько странных команд.

Как только вы довольны выводом, вы можете избавиться от логики дампа и заполнить аргументы argparse непосредственно вместо них

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

Я хотел бы проверить ConfigArgParse. Эта библиотека позволяет

комбинация аргументов командной строки, файлов конфигурации, жестко заданных значений по умолчанию и, в некоторых случаях, переменных среды

Другие вопросы по тегам