Python 我应该如何接受查询字符串中的持续时间?

Python 我应该如何接受查询字符串中的持续时间?,python,string,python-2.7,time,Python,String,Python 2.7,Time,我有一个带有Python和Flask的小型RESTAPI,对于一些GET请求,我需要接受一个look behind time duration参数,例如“a月、B天、C小时、D分钟” 这个参数将从查询字符串中解析,但我有点不确定应该如何构造查询字符串进行解析。除了lookbehind之外,查询字符串中还有其他字段,这使事情有点复杂 我提出了两个主要的选择 为查询字符串中的查找接受单个字段,例如“8months5days”,然后为传递的字符串扩展一些正则表达式解决方案,如: regex = re.

我有一个带有Python和Flask的小型RESTAPI,对于一些GET请求,我需要接受一个look behind time duration参数,例如“a月、B天、C小时、D分钟”

这个参数将从查询字符串中解析,但我有点不确定应该如何构造查询字符串进行解析。除了lookbehind之外,查询字符串中还有其他字段,这使事情有点复杂

我提出了两个主要的选择

  • 为查询字符串中的查找接受单个字段,例如
    “8months5days”
    ,然后为传递的字符串扩展一些正则表达式解决方案,如:

    regex = re.compile(r'((?P<hours>\d+?)hr)?((?P<minutes>\d+?)m)?((?P<seconds>\d+?)s)?')
    
    最后将
    query\u d
    与类似于

    durations = {'behind_m': 'months', 'behind_d': 'days', 'behind_y': 'years', ...}
    
    之后,我可以直接构造一个
    datetime.timedelta

  • 我自然倾向于第二种选择,因为我对正则表达式的理解很弱,我喜欢它的清晰性。但是,在某些查询字符串中可能需要多个持续时间,这在某些情况下会导致查询字符串非常长


    有没有一个好的方法来实现这一点,regex也是这样吗?我知道,如果有一种干净的方法来解析某个字符串格式的持续时间,整个任务会简单得多,但是尽管查看了,我还没有发现任何对持续时间解析的支持

    我选择的工具是URI中以逗号分隔的列表:

    ?behind=2,1,20,1,23,3
    
    决心:

    durations = {'years': 2, 'months': 1, 'days': 20, hours: 1, minutes: 23, seconds: 3}
    
    根据常见的用例(如果您输入的持续时间更长或更短),我决定选择年、月、日、时、分、秒的格式,或者相反

    要构建此
    dict
    ,您可以
    拆分
    字符串并将其放入dict中:

    identifiers = ['years', 'months', 'days', 'hours', 'minutes', 'seconds']
    components = behind.split(str=",")
    duration = dict(zip(identifiers, components))
    

    我选择的工具是URI中以逗号分隔的列表:

    ?behind=2,1,20,1,23,3
    
    决心:

    durations = {'years': 2, 'months': 1, 'days': 20, hours: 1, minutes: 23, seconds: 3}
    
    根据常见的用例(如果您输入的持续时间更长或更短),我决定选择年、月、日、时、分、秒的格式,或者相反

    要构建此
    dict
    ,您可以
    拆分
    字符串并将其放入dict中:

    identifiers = ['years', 'months', 'days', 'hours', 'minutes', 'seconds']
    components = behind.split(str=",")
    duration = dict(zip(identifiers, components))
    

    我会用几秒钟的时间把其他的单位放下。然后可以使用相对秒数或秒数,因为epoch@AlastairMcCormack是的,我同意,事实上,这是有道理的。我还没有真正实现一个前端框架来与API通信,所以我自己就有点固定在有人可以轻松提供自己的查询字符串上,所以我没有想到这一点。但我认为这是明智的。非常感谢。我会用几秒钟的时间把其他的单位放下。然后可以使用相对秒数或秒数,因为epoch@AlastairMcCormack是的,我同意,事实上,这是有道理的。我还没有真正实现一个前端框架来与API通信,所以我自己就有点固定在有人可以轻松提供自己的查询字符串上,所以我没有想到这一点。但我认为这是明智的。非常感谢。