如何解析Python中的自由文本时间间隔,从几年到几秒不等?

Rei*_*eid 10 python time

我想使用Python解析如下所示的自由文本时间间隔:

  • 1秒
  • 2分钟
  • 3小时
  • 4天
  • 5周
  • 6个月
  • 7年

有没有一种无痛的方法可以做到这一点,理想情况下只需调用一个库函数?

我试过了:

  • dateutil.parser.parse(),它可以理解几小时而不是几天或更长时间.
  • mx.DateTime.DateTimeDeltaFrom(),它可以通过几天了解,但在数周或更长的时间内失败,并且默默地(例如,它可能会创建一个长度为0的区间,或者将"2个月"解析为2分钟).

小智 6

这个对我来说是新的,但基于一些谷歌搜索,你试过whoosh吗?

编辑:还有parsedatetime

#!/usr/bin/env python
from datetime import datetime
import parsedatetime as pdt # $ pip install parsedatetime

cal = pdt.Calendar()
for time_str in ['1 second', '2 minutes','3 hours','5 weeks','6 months','7 years']:
    diff = cal.parseDT(time_str, sourceTime=datetime.min)[0] - datetime.min
    print("{time_str:<10} -> {diff!s:>20} <{diff!r}>".format(**vars()))
Run Code Online (Sandbox Code Playgroud)

输出

1 second   ->              0:00:01 <datetime.timedelta(0, 1)>
2 minutes  ->              0:02:00 <datetime.timedelta(0, 120)>
3 hours    ->              3:00:00 <datetime.timedelta(0, 10800)>
5 weeks    ->     35 days, 0:00:00 <datetime.timedelta(35)>
6 months   ->    181 days, 0:00:00 <datetime.timedelta(181)>
7 years    ->   2556 days, 0:00:00 <datetime.timedelta(2556)>
Run Code Online (Sandbox Code Playgroud)


Pav*_*l T 6

pytimeparselib怎么样

以秒数形式返回时间:

from pytimeparse.timeparse import timeparse
>>> timeparse('33m')
1980
>>> timeparse('2h33m')
9180
>>> timeparse('4:17')
257
>>> timeparse('5hr34m56s')
20096
>>> timeparse('1.2 minutes')
72
Run Code Online (Sandbox Code Playgroud)

源似乎在这里https://github.com/wroberts/pytimeparse