このような文字列は、少なくとも私にとっては経過時間や時間間隔のように見えます。その場合、timedelta
オブジェクトを使用して表現することをお勧めします。これを行うメリットの1つは、任意の時間間隔を追加したり減算したりするのが簡単だということです。
最初の変換:正規表現を使用して文字列から項目を分割することを選択しましたが、もちろん最も便利な手法を使用することもできます。まず、timedelta
作成関数のすべてのパラメータの辞書をtimedelta_args
に作成します。次に、この辞書の選択項目を正規表現を使ってあなたの文字列から解析した値に置き換えます。次に、辞書の値をすべてtimedelta
に渡し、この関数が期待する順序で値を設定します。 timespan
の値は、そのプロパティの値と同じように私が望んだ値です。
>>> from datetime import timedelta
>>> import re
>>> s = '00:00:40,249'
>>> timedelta_args = {'days':0, 'seconds':0, 'microseconds':0, 'milliseconds':0, 'minutes':0, 'hours':0, 'weeks':0}
>>> timedelta_args['hours'], timedelta_args['minutes'], timedelta_args['seconds'], timedelta_args['milliseconds'] = map(int, re.split(r'[:,]', s))
>>> timespan = timedelta(*[timedelta_args[_] for _ in ['days', 'seconds', 'microseconds', 'milliseconds', 'minutes', 'hours', 'weeks']])
>>> timespan
datetime.timedelta(0, 40, 249000)
>>> timespan.seconds
40
>>> timespan.microseconds
249000
Iは容易timespan
の文字列表現を取得することができ、そして限り、ミリ秒単位の数が1000以上であるように私は簡単に元の文字列を取得することができます。timespan
ので
>>> str(timespan)
'0:00:40.249000'
>>> str(timespan)[:-3]
'0:00:40.249'
>>> str(timespan)[:-3].replace('.', ',')
'0:00:40,249'
は、私はそれに追加する(およびそれから減算する)ことができるtimedelta
あります。生の結果は非常に満足のいくものではないかもしれません。しかし、すぐにこれを補う機能はstr
です。
>>> timespan + timedelta(hours=3, seconds=20)
datetime.timedelta(0, 10860, 249000)
>>> str(timespan + timedelta(hours=3, seconds=20))
'3:01:00.249000'
かなり小さなヒッチに注意していますが、フォーマットしているときは、 microseconds
プロパティがゼロの場合、文字列表現で完全にオフになります。 /:
>>> str(timespan + timedelta(hours=3, microseconds=751000))
'3:00:41'
'が存在しないようにミリ秒を使用していないdatetime.time'目的は、利用可能な唯一の属性は、これは[XY通報](HTTPSで3つの余分ゼロ – abccd
を有するマイクロ秒であります/meta.stackexchange.com/questions/66377/what-is-the-xy-problem)、あなたのコードと実際に何をしようとしているのかを示す必要があります。 –