Python argparse: получить аргумент без разбора - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь написать простой python скрипт, который будет переименовывать файлы в каталоге, используя соглашения об именах. Для этого мне нужен путь к каталогу и количество файлов для обработки. По умолчанию я хочу, чтобы скрипт переименовал все файлы в каталоге.

import os
import sys
import shutil
import argparse

parser = argparse.ArgumentParser(description='Rename files in the directory, using naming conventions')
parser.add_argument('name', help='first part of a new name')
parser.add_argument('--dir', default=os.getcwd(), help='directory containing files')
parser.add_argument('--num', type=int, default = len([file for file in os.listdir(parser.parse_args().dir)]),
                        help='number of files to rename')

args = parser.parse_args()

А вот вывод только для аргумента '-h':

usage: rename.py [-h] [--dir DIR] name

Rename files in the directory, using naming conventions

positional arguments:
  name        first part of a new name

optional arguments:
  -h, --help  show this help message and exit
  --dir DIR   directory containing files

Мне кажется, что последний аргумент не обрабатывается из-за parser.parse_args().dir.

Есть ли способ получить информацию о предыдущем аргументе, не анализируя его?

1 Ответ

1 голос
/ 31 января 2020

Есть ли способ получить информацию о предыдущем аргументе без его анализа?

Нет. По крайней мере, не ту информацию, которую вы ищете. Чтобы узнать, какое значение дано для одного из аргументов, вам нужно проанализировать аргументы.

Способ реализации желаемого поведения по умолчанию - через значение флага, означающее «обработать их все». Например:

parser.add_argument('--num', type=int, default=None),
                        help='number of files to rename')

# then in your code, after you parse the arguments:

if args.num is not None:
  # process just num
else:
  # process all the files
...