How do I parse a date as an argument with argparse?
Im trying to write a python program that I will run at the command line. I'd like the program to take a single input variable. Specifically, I would use a date in the form of 2014-01-28 (yyyy-mm-dd):
e.g. python my_script.py 2014-01-28
It seems argparse might be able to help me but I have found very little documentation regarding the module. Does anyone have experience with something like this?
Solution 1:
There's lots of documentation in the standard library, but generally, something like:
import argparse
import datetime
parser = argparse.ArgumentParser()
parser.add_argument(
'date',
type=lambda s: datetime.datetime.strptime(s, '%Y-%m-%d'),
)
# For testing. Pass no arguments in production
args = parser.parse_args(['2012-01-12'])
print(args.date) # prints datetime.datetime object
Solution 2:
As of Python 3.7, a (marginally) more convenient option is fromisoformat
: https://docs.python.org/3/library/datetime.html#datetime.date.fromisoformat
Using it, you can replace the relevant line in mgilson's code with this:
parser.add_argument('date', type=datetime.date.fromisoformat)
(I would also add a help
argument to this invocation of add_argument
, and mention that the input should be in ISO format.)