programing

Python argparse 입력 인수에 대한 날짜 형식 지정

lastmoon 2023. 7. 16. 17:47
반응형

Python argparse 입력 인수에 대한 날짜 형식 지정

일부 명령줄 입력이 필요한 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단일 문자열을 허용하는 임의의 호출 가능입니다.

다음과 같은 작업을 수행할 수 있습니다.

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
)

위의 답변에 추가하기 위해 람다 함수를 한 줄로 유지하려면 람다 함수를 사용할 수 있습니다.예:

parser.add_argument('--date', type=lambda d: datetime.strptime(d, '%Y%m%d'))

오래된 맥락이지만 적어도 그 질문은 여전히 나에게 관련이 있었습니다!

검색 엔진을 통해 이것을 히트시킨 다른 사람들을 위해: 파이썬 3.7에서는 표준을 사용할 수 있습니다..fromisoformatISO-8601 준수 날짜를 위해 휠을 재설계하는 대신 클래스 방법(예:

import datetime

parser.add_argument('-s', "--startdate",
    help="The Start Date - format YYYY-MM-DD",
    required=True,
    type=datetime.date.fromisoformat)
parser.add_argument('-e', "--enddate",
    help="The End Date format YYYY-MM-DD (Inclusive)",
    required=True,
    type=datetime.date.fromisoformat)

언급URL : https://stackoverflow.com/questions/25470844/specify-date-format-for-python-argparse-input-arguments

반응형