私の状況では、タイムスタンプ付きのアイテムのリストがありますが、実際の時刻はすべて一緒に押しつぶされています。このような:
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)
戻り値:
['こんにちは世界']
可能であれば、関数ではなく、インラインで実行する方法が必要です。そして、それは可能な限り効率的でなければなりません。見つけた関数からリスト内包表記をいつでも抽出できますが、あまり効率的ではないと感じており、見栄えがよくありません。
答えはおそらく私が知らなかった非常に単純なものです。再度、感謝します。