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