我试图用将参数转换成timedelta
对象。我的程序在用户提供的字符串中读取并把它们转换成各种datetime
对象以备后用。我无法正确处理filter_length
参数。我的代码:Python argparse:从参数创建timedelta对象?
import datetime
import time
import argparse
def mkdate(datestring):
return datetime.datetime.strptime(datestring, '%Y-%m-%d').date()
def mktime(timestring):
return datetime.datetime.strptime(timestring, '%I:%M%p').time()
def mkdelta(deltatuple):
return datetime.timedelta(deltatuple)
parser = argparse.ArgumentParser()
parser.add_argument('start_date', type=mkdate, nargs=1)
parser.add_argument('start_time', type=mktime, nargs=1,)
parser.add_argument('filter_length', type=mkdelta, nargs=1, default=datetime.timedelta(1))#default filter length is 1 day.
我运行的程序,通过1
作为timedelta
值(我只希望它是一天):
> python program.py 2012-09-16 11:00am 1
,但我得到了以下错误:
>>> program.py: error: argument filter_length: invalid mkdelta value: '1'
我不明白为什么值无效。如果我请自行mkdelta功能,像这样:
mkdelta(1)
print mkdelta(1)
它返回:
datetime.timedelta(1)
1 day, 0:00:00
这正是我要寻找的价值。有人可以帮我弄清楚如何正确使用来做这个转换吗?
所以,这个工作,但是,它只允许我指定函数的日期。它实际上不支持完整的timedelta表示法:([days [,seconds [,微秒[,毫秒[,分钟[,小时[,星期]]]]]]])。我需要能够传递所有日期时间值作为参数。我会怎么做呢? – user1675914
您必须为此创建文本格式,或使用多个命令行开关,然后将其解析为timedelta对象的参数。 –
为什么你需要支持完整的timedelta符号?在你的要求中,你说你只需要一天的时间。如果你想让你的用户指定更多的标志,你需要传递nargs ='?'。这样mkdelta将会收到一个带有剩余参数的字符串。 –