1. ホーム
  2. python

[解決済み] Python argparseの入力引数の日付形式を指定する

2022-06-22 05:50:24

質問

コマンドライン入力を必要とする 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 に、これを実現する私の知らないオプションがあるのでしょうか?

どのように解決するのですか?

以下の通りです。 ドキュメント :

type のキーワード引数 add_argument() は,必要な型チェックや型変換を行うことができる.の引数は type への引数は、単一の文字列を受け入れる任意のcallableであることができます。

のようなことができる。

def valid_date(s):
    try:
        return datetime.strptime(s, "%Y-%m-%d")
    except ValueError:
        msg = "not a valid date: {0!r}".format(s)
        raise argparse.ArgumentTypeError(msg)

そして、これを type :

parser.add_argument(
    "-s", 
    "--startdate", 
    help="The Start Date - format YYYY-MM-DD", 
    required=True, 
    type=valid_date
)