У меня есть скрипт python, который требует ввода некоторых данных в командной строке, и я использую argparse для их анализа. Я нашел документацию немного запутанной и не смог найти способ проверить формат во входных параметрах. То, что я имею в виду под проверкой формата, объясняется этим примером сценария:
parser.add_argument('-s', "--startdate", help="The Start Date - format YYYY-MM-DD ", required=True)
parser.add_argument('-e', "--enddate", help="The End Date format YYYY-MM-DD (Inclusive)", required=True)
parser.add_argument('-a', "--accountid", type=int, help='Account ID for the account for which data is required (Default: 570)')
parser.add_argument('-o', "--outputpath", help='Directory where output needs to be stored (Default: ' + os.path.dirname(os.path.abspath(__file__)))
Мне нужно проверить вариант -s
и убедиться, -e
что ввод пользователя находится в формате YYYY-MM-DD
. Есть ли в argparse опция, которую я не знаю, которая выполняет это.
источник
valid_date()
Предполагает ли, что данный аргумент является строкой?Чтобы добавить к ответу выше, вы можете использовать лямбда-функцию, если хотите, чтобы она была однострочным. Например:
Старая ветка, но вопрос по крайней мере для меня был актуален!
источник
invalid <lambda> value
Для других, кто попал в эту задачу через поисковые системы: в Python 3.7 вы можете использовать стандартный
.fromisoformat
метод класса вместо того, чтобы изобретать колесо для дат, соответствующих ISO-8601, например:источник
dateutil
«s анализатор ISO принимает ряд дополнительных fmts, которые до сих пор ISO 8601-2004 требований. Вы можете использоватьimport dateutil.parser
->type=dateutil.parser.isoparse
илиtype=dateutil.parser.parse
dateutil
это сторонний пакет. Можно было бы судить о его преимуществах относительно (небольших) хлопот, связанных с его дополнительной установкой. YMMV.