3

問題:

Python 2.6 でログ ファイルを解析しようとしています。共通ログの日付文字列を時刻オブジェクトに解析する際に問題が発生しました。

13/Sep/2012:06:27:18 +0200

私がすでに試したこと

使用するdateutils.parser.parse

すでに使用してみdateutils.parser.parseましたが、次のエラーで解析に失敗しました:

ValueError: unknown string format

使用するtime.strptime

time.strptimeフォーマット文字列を試してみました%d/%b/%Y:%H:%M:%S %zが、タイムゾーンを解析するときに問題が発生しました:

ValueError: 'z' is a bad directive in format '%d/%b/%Y:%H:%M:%S %z'

エラーがどこにあるのか、誰にもわかりますか?それとも単に間違ったアプローチですか?

最終的解決

最後にtime.strptime、タイムゾーン情報を取り除いて使用することにしました。

time.strptime(datestring[:-6], '%d/%b/%Y:%H:%M:%S')

使用したくない理由はdateutils、(実際に C 関数を呼び出す)よりもはるかにdateutils遅いためです。strptime

4

1 に答える 1

4

これは私が見るものです:

  • dateutil日付に時刻が追加されるのを嫌います
  • ディレクティブは、%z基礎となる C 実装でサポートされていません (この質問を参照してください)

迅速かつ簡単な解決策 (ただし、あまりエレガントではありません):

>>> s = '13/Sep/2012:06:27:18 +0200'
>>> dateutil.parser.parse(s.replace(':', ' ', 1))
datetime.datetime(2012, 9, 13, 6, 27, 18, tzinfo=tzoffset(None, 7200))

注意として、オプションの 3 番目のパラメータreplacemax replacement countです。

于 2012-09-17T14:37:34.977 に答える