Argparse: установить текстовый файл по умолчанию

#python #argparse

#python #argparse

Вопрос:

Я хочу установить текстовый файл rand.letter.txt в качестве файла word по умолчанию в этом сегменте argparse, который будет использоваться и считываться в программе. Я бы предположил, что это должно быть расположено в строке 4-5 ниже. Как мне это сделать?

Как вы увидите, я уже сделал это с размером матрицы. Но я испытываю трудности, когда речь идет о файле с характеристиками str.

 def main():
    print("WELCOME TO THE MEMORY PUZZLE!")

    parser = argparse.ArgumentParser(description="Memory game") 
    parser.add_argument("words_file", metavar="FILE", nargs=1,
                        help="Words file")

    parser.add_argument(
        "--matrix-size",
        metavar="SIZE",
        dest="matrix_size",
        help="Matrix size",
        default=6,
        type=int,
        )

    args = parser.parse_args()

    game = Game(args.words_file[0], args.matrix_size)
    game.play()
 

Большое вам спасибо за любую помощь или ввод!

Комментарии:

1. Вы пробовали добавлять default="rand.letter.txt" ?

2. Да, к сожалению, он не работает, возвращает, что в нем отсутствует файл, если я не включаю его при запуске программы (чего я не собираюсь делать), «ошибка: требуются следующие аргументы: FILE»

Ответ №1:

Если вам нужен позиционный аргумент по умолчанию, вам нужно указать nargs as ? . При этом будет использоваться один аргумент из командной строки, если он доступен, в противном случае будет использоваться значение по умолчанию.

 parser.add_argument(
    "words_file", nargs="?", default="rand.letter.txt", help="Words file"
)
 

Кроме того, когда вы инициализируете свой game , вы отсекаете первый символ от words_file переменной. Вам нужно изменить его на:

 game = Game(args.words_file, args.matrix_size)
 

Обратите [0] внимание, что он исчез.

Комментарии:

1. Спасибо, проблема в том, что я получаю это сообщение: » FileNotFoundError: [Ошибка 2] Нет такого файла или каталога: ‘r’ «, когда я не ввожу никаких аргументов (поскольку мне просто нужны значения по умолчанию): (venv) n147-p63:Project rebeckae $ python3 game.py

Ответ №2:

Если вы хотите установить значения по умолчанию для positional, вы должны указать nargs="?" Source . nargs=1 в любом случае, в вашем примере это кажется излишним, поскольку он создает список только из одного элемента. Итак, ваша строка должна выглядеть так:

 parser.add_argument("words_file", metavar="FILE", nargs="?",
                        default="rand.letter.txt", help="Words file")