2012-11-11 82 views
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) 

在試圖解決我的情況我已經看到了這個問題的許多變化,許多答案。

我發現this solution

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'] 

但我敢肯定有必須是一個字符串分割成組的更好,更優雅的方式相等的尺寸,如在我提供的link提到(但固定的,因爲在鏈路海報有錯字):

TheFunction( 「Hello World」 的,3)

返回:

[ '赫爾', '羅', '義和', 'LD']

如果可能的話,我寧願,它不是一個函數,我想要一種方法來實現它。它應該儘可能高效。我總是可以從我找到的函數中提取列表理解,但是我有一種感覺不是很高效,而且看起來不正確。

答案可能很簡單,我只是不知道。再次感謝。

+0

問題已經得到解答 - 但是,如果他們找到更好的解決方案來分割字符串,我仍然想知道是否有人遇到過這種情況。 –

回答

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) 
+0

多數民衆贊成多好,我不相信我沒有想到的日期時間的本地解決方案,因爲它是日期時間輸出該樣式,它必須能夠得到它作爲輸入以及。 –

2

您可以使用textwrap.wrap()此:

>>> import textwrap 
>>> s = "165420" 
>>> n = 2 
>>> textwrap.wrap(s, n) 
['16', '54', '20']