У меня есть работающее регулярное выражение (и 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 будет иметь аргументы из второго совпадения с регулярным выражением и так далее.Теперь я могу печатать только совпадающие результаты при разборе регулярных выражений.
Возможно ли это вообще?