2

一般的なカスタムstrToDatetime(string)関数を作成しています。日付文字列は、いくつかの異なる形式である場合があります。最も一般的な 2 つの選択肢はdatetime.strptime(string, format)、 とのようですdateutil.parser(string)datetime.strptime()フォーマットが必要なようですが、そうでdateutil.parser()はないため、可能な解決策は次のようになります。

  1. 日付文字列パターンをテストして、日付文字列形式を見つけて使用しますdatetime.strptime()
  2. 使用するdateutil.parser()

これは正しいです?代替案 1 (より難しく、将来的にメンテナンスが必要になる可能性があります) には、パフォーマンスなどの利点がありますか?

4

2 に答える 2

4

dateutilのparse()メソッドは非常に柔軟で、投げたほとんどすべてを解析します。

ただし、その柔軟性のために、入力が特定の数のパターンに制限されている場合、それらのパターンをチェックしてから使用するカスタム コードdatetime.datetime.strptime()は簡単に打ち負かすことができます。

これは、テストする必要があるパターンの数に完全に依存するため、特定のユースケースでどのパターンがより高速になるかを測定することしかできません。

于 2012-10-04T09:12:41.497 に答える
1

私は常に最も単純な (dateutil.parser) を使用します。誰かが常にあなたのために作業を行っており、不正な形式 (フォーマットによると) の日付でエラーを吐き出す可能性は低くなります。

もちろん、不正な形式の、おそらくあいまいな date でエラーをスローしたい場合もありますが、この場合はstrptime!を使用する必要があります。

性能テスト:

私はそれぞれ100,000回電話parse(d)しました。datetime.datetime.strptime(d, f)

parse(d) took 5.62201309204 seconds
datetime.datetime.strptime(d, f) took 1.78140687943 seconds
    (where d = '11-02-1980' and f = '%m-%d-%Y')

正確な日付形式を知っていれば、strptime約 3 倍高速であるように思われますが、これはあまり科学的な実験ではありませんが、良い兆候を示していると思います。

では、このわずかな速度の向上は、追加の不必要な合併症/頭痛に見合うだけの価値があるのでしょうか? それはあなた次第です(しかし、おそらくそうではありません)。

于 2012-10-04T09:26:35.110 に答える