【问题标题】:How to pass a date using argparse in Python 3.7+?如何在 Python 3.7+ 中使用 argparse 传递日期?
【发布时间】:2019-02-12 05:52:35
【问题描述】:
parser.add_argument("-s", "--start-date", dest="start_date", 
                    default=date.today() - timedelta(days = 1), 
                    type=date, help="Date in the format yyyymmdd")

这个方法报错

argument_test.py: error: argument -s/--start-date: invalid date value: 20181215

我假设收到的参数是一个字符串,并且它不兼容,因为预期的对象是日期。那么,我如何实际传递日期对象?有解决办法吗?

我可以解析一个字符串并将它传递给一个日期对象。但是,我想探索其他直接选择。

【问题讨论】:

  • date 函数是什么?查看sys.argv 以查看shell 传递给您的脚本的内容。这就是解析器必须处理的。首先,我建议只接受一个字符串,并在解析后自己转换为数据。这样您就可以更加关注它是如何完成的,而无需假设 argparse 可能会或可能不会做什么。
  • type 参数应该是一个函数。它不是期望对象类型的名称。它只是在做date("20181215")
  • @hpaulji 这是否意味着,每次我指定时间时,我基本上都是在调用构造函数?

标签: python python-3.x datetime argparse


【解决方案1】:

您可以使用使用datetime.strptime 的包装函数来解析具有所需格式的给定日期字符串:

parser.add_argument("-s", "--start-date", dest="start_date", 
                    default=date.today() - timedelta(days = 1), 
                    type=lambda d: datetime.strptime(d, '%Y%m%d').date(),
                    help="Date in the format yyyymmdd")

【讨论】:

  • 所以这里的类型是什么函数的返回类型?
  • 是的,type 可以是任何可调用的,它采用单个字符串参数并返回转换后的值。详情请参考documentation
猜你喜欢
  • 2021-03-21
  • 1970-01-01
  • 2018-05-21
  • 2021-02-28
  • 2016-04-07
  • 2021-10-23
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多