2

日付形式が異なる多数の文字列があります。文字列から日付を抽出できるようにしたいと思います。例えば:

  • 今日は 2012 年 8 月です。明日は違います。
  • 別の日 8月12日 別の時間
  • 12/08は別フォーマット
  • 別のものを持っていますか?2012 年 8 月 12 日
  • 最終的に8月12日は

これらの各結果から得られると予想されるのは、2012-08-01 00:00:00、2013-08-12 00:00:00、2013-08-12 00:00:00、2012-08-12 です。 00:00:00、2013-08-12 00:00:00。

私は現在、このコードを持っています:

from dateutil import parser
print parser.parse("Today is August 2012. Tomorrow isn't",fuzzy=True)

これから、日付が 2012-08-27 00:00:00 と表示されることがわかります (今日は月の 27 日であるため)。この例で必要なのは、2012-08-01 00:00:00 です。

日が指定されていない場合、常に月の初日を強制するにはどうすればよいですか? (たとえば、2012 年 8 月を指定すると 2012-08-01 が返され、2012 年 8 月 12 日を指定すると 2012-08-12 が返されます。)

4

1 に答える 1

4

default引数を使用して、デフォルトの日付を設定します。これは、3 番目のケースを除くすべてのケースを処理する必要があります。これはややあいまいで、パーサーの微調整またはマインドリーダーが必要になる可能性があります。

In [15]: from datetime import datetime

In [16]: from dateutil import parser

In [17]: DEFAULT_DATE = datetime(2013,1,1)

In [18]: dates=["Today is August 2012. Tomorrow isn't",
    ...:        "Another day 12 August, another time",
    ...:        "12/08 is another format",
    ...:        "have another ? 08/12/12 could be", 
    ...:        "finally august 12 would be"]


In [19]: for date in dates:
    ...:     print parser.parse(date,fuzzy=True, default=DEFAULT_DATE)
    ...:     
2012-08-01 00:00:00
2013-08-12 00:00:00
2013-12-08 00:00:00  # wrong
2012-08-12 00:00:00
2013-08-12 00:00:00
于 2013-01-27T14:27:28.807 に答える