Mam skrypt w Pythonie, który wymaga pewnych danych wejściowych wiersza poleceń i używam argparse do ich analizowania. Dokumentacja wydawała mi się nieco zagmatwana i nie mogłem znaleźć sposobu, aby sprawdzić format w parametrach wejściowych. To, co mam na myśli przez sprawdzanie formatu, jest wyjaśnione w tym przykładowym skrypcie:
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__)))
Muszę sprawdzić opcję -s
i -e
czy dane wejściowe użytkownika są w formacie YYYY-MM-DD
. Czy w argparse jest opcja, której nie wiem, która to umożliwia.
źródło
valid_date()
zakłada, że podany argument jest łańcuchem?Aby dodać do powyższej odpowiedzi, możesz użyć funkcji lambda, jeśli chcesz zachować ją w jednym wierszu. Na przykład:
Stary wątek, ale pytanie wciąż było aktualne przynajmniej dla mnie!
źródło
invalid <lambda> value
Dla innych, którzy trafili na to przez wyszukiwarki: w Pythonie 3.7 możesz użyć standardowej
.fromisoformat
metody klasy zamiast wymyślać koło dla dat zgodnych z ISO-8601, np .:źródło
dateutil
jest parser ISO podejmuje szereg dodatkowych fmts które są nadal zgodne z ISO 8601-2004. Możesz użyćimport dateutil.parser
->type=dateutil.parser.isoparse
lubtype=dateutil.parser.parse
dateutil
jest to pakiet innej firmy. Trzeba by było ocenić jego zalety w porównaniu z (małym) kłopotem związanym z dodatkową instalacją. YMMV.