1

私の状況では、タイムスタンプ付きのアイテムのリストがありますが、実際の時刻はすべて一緒に押しつぶされています。このような:

time = "165420" # 16:54:20 (or, 4:54 PM and 20 seconds.)

スクリプトで行を調べて、タイムスタンプを日時に変換できるようにしたかったのです。年、月、日はもう問題ありませんでした。しかし、当時の状況では、私はエレガントでシンプルな解決策を見つけることに必死でした。最初はコードを続行するためにブルートフォース攻撃を行うことにしましたが、最終的には次のようになりました。

import datetime

dt_timestamp = extract_dt("2012-11-09-165420") # example

def extract_dt(timestamp):
    ds = timestamp.split('-') #split into groups (0,1,2 are the date, 3 is the time.
    d = [int(i) for i in ds[:3]] + [int(ds[3][0:2]), int(ds[3][2:4]), int(ds[3][4:6])]
    return datetime.datetime(*d)

私の状況を解決しようとしている間、私はこの質問に多くのバリエーションを見て、多くの答えがありました。

私はこの解決策を見つけました:

def nsplit(s, n):
    return [s[k:k+n] for k in xrange(0, len(s), n)]

これは私にとってうまく機能します:

>>> s = "165420"
>>> n = 2
>>> [s[k:k+n] for k in xrange(0, len(s), n)]
['16', '54', '20']

しかし、私が提供したリンクで述べたように、文字列を同じサイズのグループに分割するためのより良い、よりエレガントな方法がなければならないことはかなり確信しています(ただし、リンクのポスターにタイプミスがあったため修正されました):

TheFunction( "Hello World"、3)

戻り値:

['こんにちは世界']

可能であれば、関数ではなく、インラインで実行する方法が必要です。そして、それは可能な限り効率的でなければなりません。見つけた関数からリスト内包表記をいつでも抽出できますが、あまり効率的ではないと感じており、見栄えがよくありません。

答えはおそらく私が知らなかった非常に単純なものです。再度、感謝します。

4

2 に答える 2

2

私はあなたがあなたの質問で言及したものよりも文字列をチャンク化するためのより洗練された解決策を知りませんが、datetime.datetime.strptime()あなたの実際的な問題を解決します:

>>> from datetime import datetime
>>> datetime.strptime("2012-11-09-165420", "%Y-%m-%d-%H%M%S")
datetime.datetime(2012, 11, 9, 16, 54, 20)
于 2012-11-11T15:09:54.563 に答える
2

これに使用できますtextwrap.wrap()

>>> import textwrap
>>> s = "165420"
>>> n = 2
>>> textwrap.wrap(s, n)
['16', '54', '20']
于 2014-01-12T19:07:45.117 に答える