解析Python中的humanformat日期范围

2024-10-01 17:35:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些人类风格的日期范围,字符串形式,如下所示:

22-24th April 2012
14-23 July
20th June - 5th July

我想用Python解析它们,这样我就可以得到两个datetime对象:一个用于开始,一个用于结束。在

有什么模块可以让我这么做吗?我尝试过parsedatetime,它看起来像是其中的evalRange函数可以做到这一点(有关文档,请参见http://code-bear.com/code/parsedatetime/docs/index.html),但它似乎根本不解析任何内容,只返回当前日期/时间,两次。在

有什么想法吗?在


Tags: 模块对象函数字符串文档datetime风格code
3条回答

根据前面的答案,您可以做的是:

  1. 对输入进行预处理,以便获得开始和结束日期(例如:20th June和{})。在第一个示例(date_range == 22-24th July 2012)中,可以使用date_range.split(' ')[0].split('-')来实现:这将返回['22', '24th'](只需删除th和类似的内容)
  2. 使用dateutil.parser:dateutil.parser.parse('22 July 2012')从这些日期中获取datetime对象

下面是之前所说的一个实现:

import dateutil.parser
date_range = '20-22th July 2013'
date_range = date_range.lower()
for suffix in {'th', 'rd', 'st'}:
    date_range.replace(suffix, '')
days = date_range.split(' ')[0].split('-')
month_year = date_range.split(' ')[1]
begin, end = days[0] + ' ' + month_year, days[1] + ' ' + month_year
begin_date = dateutil.parser.parse(begin)
end_date = dateutil.parser.parse(end)

最后,我编写了一个Python模块来实现这一点,现在我已经开源了。它可以在Github上下载,还有{a2},可以使用以下方法从PyPI安装:

pip install daterangeparser

对于感兴趣的人,该模块通过使用PyParsing创建一个完整的解析器来工作,这是一个非常好(而且非常容易使用)的工具。在

您可以使用dateutil.parser。但它不处理日期范围。您可能需要先应用正则表达式。在

import dateutil.parser
dateutil.parser.parse("20th June")

返回datetime.datetime(2012, 6, 20, 0, 0)

问候

相关问题 更多 >

    热门问题