Argparse запрашивает одни и те же аргументы несколько раз и печатает в файл - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть работающее регулярное выражение (и argparse) для разбора аргументов командной строки, разделенных [и] следующим образом: [-p 3 -d 5 -c purrfect] [-p 4 -d 8 -c 8] [-p5 -d 4 -c 10] Эти аргументы должны быть напечатаны в текстовом файле следующим образом (см. Методы ниже):

Parrots: 3
Dogs: 5
Cats: purrfect

Parrots: 4
Dogs: 8
Cats: 8

Parrots: 5
Dogs: 4
Cats: 10

Эти входные аргументы могут изменяться в разных группах и иметь тип int, str илиfloat.

Я проверил эти вопросы, но они на самом деле не отвечают по проблеме:

Argparse, обрабатывать повторяемый набор элементов и Python argparser repeat subparse

Я также попробовал несколько способов, включая подсчет количества совпадений регулярных выражений и каким-то образом заставить индексы совпадений работать с ними, но без помощи.

Моя функция синтаксического анализа с argparse выглядит следующим образом:

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-c", "--cat", nargs="*")
    parser.add_argument("-d", "--dog", nargs="*")
    parser.add_argument("-p", "--parrot", nargs="*")
    args = parser.parse_args()

    parse_arguments(args)

def parse_arguments(args):
    all_arguments = ' '.join(sys.argv[1:])
    match = re.findall("\[.*?\]", all_arguments)
    content = Content()        
    # with open('file.txt', 'w') as f:
    for index, i in enumerate(match):
        print(index, i)
            # f.write(first_group, second_group) etc...

Я хочу, чтобы была возможность печатать заданные аргументы с помощью следующих методов:

class Content(object):
    def __init__(self, args):
        self.cat = args.cat
        self.dog = args.dog
        self.parrot = args.parrot

def first_group(self):
    return "Cats: " + str(self.cat) + "\n" + "Dogs: " + str(self.dog) + "\n" + "Parrots: " + str(self.parrot) + "\ņ"

def second_group(self):
    return "Cats: " + str(self.cat) + "\n" + "Dogs: " + str(self.dog) + "\n" + "Parrots: " + str(self.parrot) + "\ņ"

def third_group(self):
    return "Cats: " + str(self.cat) + "\n" + "Dogs: " + str(self.dog) + "\n" + "Parrots: " + str(self.parrot) + "\ņ"

Там эта first_group будет соответствовать первому совпадению с регулярным выражением, так что аргумент"--кошка" печатает в "Cats:" + str (self.cat) и т. д., а second_group будет иметь аргументы из второго совпадения с регулярным выражением и так далее.Теперь я могу печатать только совпадающие результаты при разборе регулярных выражений.

Возможно ли это вообще?

...