10

次のように、人間のスタイルの日付範囲を文字列でいくつか持っています。

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

これらを Python で解析して、最終的に 2 つの datetime オブジェクトを作成できるようにしたいと考えています。1 つは開始用、もう 1 つは終了用です。

これを可能にするモジュールはありますか?私は試してみましたがparsedatetime、そのevalRange中の関数がそれを行う可能性があるように見えます(ドキュメントについてはhttp://code-bear.com/code/parsedatetime/docs/index.htmlを参照してください)が、何も解析していないようですまったく、現在の日付/時刻を 2 回返すだけです。

何か案は?

4

3 に答える 3

11

これを行うためのPythonモジュールを作成し、現在はオープンソースにしています。Githubでダウンロードでき、ドキュメントがあり、次を使用して PyPI からインストールできます。

pip install daterangeparser

興味のある方のために、このモジュールはPyParsingを使用して完全なパーサーを作成することで機能します。これは優れた (そして非常に使いやすい) ツールです。

于 2013-09-14T12:31:33.877 に答える
1

以前の回答に基づいて、できることは次のとおりです。

  1. 入力を前処理して、開始日と終了日を取得します (例: 20th Juneand 5th July)。最初の例 ( )では、 を使用してそれをdate_range == 22-24th July 2012行うことができますdate_range.split(' ')[0].split('-')['22', '24th']th
  2. datetime以下を使用して、これらの日付からオブジェクトを取得しdateutil.parserます。dateutil.parser.parse('22 July 2012')

以前に述べたことの実装は次のとおりです。

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)
于 2013-09-14T12:49:28.783 に答える
1

を使用できますdateutil.parser。ただし、日付範囲は処理しません。前に正規表現を適用する必要がある場合があります。

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

戻り値datetime.datetime(2012, 6, 20, 0, 0)

よろしく

于 2012-04-26T19:36:16.080 に答える