簡體   English   中英

在Python中格式化字符串的時間

[英]Time formatting strings in Python

我正在嘗試將這些數字字符串轉換為“ hh:mm:ss”格式。 字符串長度各不相同,以下是一些:

(212812, 218654, 232527, 235959, 0, 181240, 25959, 153834)

所以我想把上面的數字變成這個:

(21:28:12, 21:86:54, 23:25:27, 23:59:59, 00:00:00, 18:12:40, 2:59:59, 15:38:34)

我大部分都無法獲得相同的長度,例如將0轉換為00:00:00。

謝謝!

正如其他人在評論中指出的那樣,目前尚不清楚某些輸入的正確答案(例如1234,我的代碼將是00:12:34)。 考慮到希望獲得00:00:00,我還認為02:59:59比2:59:59是更好的答案。

所以這是我的代碼,以我選擇的2:59:59模為模,正確處理了上述所有輸入:

import re

def convert(numeric_time):
    return ':'.join(re.findall('..', str(numeric_time).zfill(6)))

times = (212812, 218654, 232527, 235959, 0, 181240, 25959, 153834)
correct_answers = ['21:28:12', '21:86:54', '23:25:27', '23:59:59', '00:00:00', '18:12:40', '02:59:59', '15:38:34']

answers = map(convert, times)
for answer, correct_answer in zip(answers, correct_answers):
    assert answer == correct_answer, '{} != {}'.format(answer, correct_answer)

UPDATE

由於某些人反對正則表達式,因此這是一個不依賴於正則表達式的類似版本:

def convert(numeric_time):
    padded_time = str(numeric_time).zfill(6)
    return ':'.join(padded_time[i:i+2] for i in range(0, len(padded_time), 2))

好吧,因為我們要做出答案,所以這是一個不使用正則表達式的“解決方案”:

In [3]: def weird_time_format(fmt):
   ...:     fmt = str(fmt)
   ...:     hours = fmt[:2].ljust(2, '0')
   ...:     mins = fmt[2:4].ljust(2, '0')
   ...:     secs = fmt[4:6].ljust(2, '0')
   ...:     return ':'.join((hours, mins, secs))
   ...:

In [4]: weird_time_format(212812)
Out[4]: '21:28:12'

這利用了一個事實,即字符串切片可以很好地處理越界索引,並且返回空字符串而不是拋出錯誤:

In [1]: ''[1:2]
Out[1]: ''

In [2]: ''[1:2].ljust(2, '0')
Out[2]: '00'

這是示例輸入的結果:

In [5]: example_input = (212812, 218654, 232527, 235959, 0, 181240, 25959, 153834)

In [6]: tuple(map(weird_time_format, example_input))
Out[6]:
('21:28:12',
 '21:86:54',
 '23:25:27',
 '23:59:59',
 '00:00:00',
 '18:12:40',
 '25:95:90',
 '15:38:34')

自從我提出以來,它對1234是什么:

In [7]: weird_time_format(1234)
Out[7]: '12:34:00'

好吧,我覺得(有點)不好笑。 如果您真的對這種方法感興趣,這將更好地工作,並且與其他答案的輸出更加一致:

In [3]: def weird_time_format(fmt):
   ...:     fmt = str(fmt).rjust(6, '0')
   ...:     return ':'.join((fmt[:2], fmt[2:4], fmt[4:6]))

這是另一種嘗試。

基本概念是,如果輸入字符串的長度小於6則加0

a = (212812, 218654, 232527, 235959, 0, 181240, 25959, 153834)
input_list = map(str,a)
for input in input_list:
    if len(input) != 6:
        input = ''.join(['0' for i in range((6 - len(input)))]+list(input))
    print ':'.join([input[i:i+chunk_size] for i in range(0,len(input),len(input)/3)])  

結果

21:28:12
21:86:54
23:25:27
23:59:59
00:00:00
18:12:40
02:59:59
15:38:34

希望這可以幫助:

data = (212812, 218654, 232527, 235959, 0, 181240, 25959, 153834)
time = map(str, data) #int to string


def conv(time_array):
    for t in time_array:
        if(len(t) != 6):
            t = str(t.zfill(6)) #filling 0's if less than 6
        print ':'.join(t[i:i + 2] for i in range(0, len(t), 2)) #adding ':' 

conv(time)

輸出使用一些測試數據

test = (1234, 23, 133, 6)
00:12:34
00:00:23
00:01:33
00:00:06

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM