我想datetime從像這樣的字串時間碼串列中創建物件。但是,parse對于我的用例解釋不正確。
from datetime import datetime
from dateutil import parser
timecodes = ['0:00', '0:01', '1:01', '10:01', '1:10:01']
dt = parser.parse(timecode)
print(dt)
上面的串列來自 YouTube 的成績單時間碼。從站點復制時,它們使用可變格式來指定小時、分鐘和時間,基于經過的時間:
0:00 # 0 minutes, 0 seconds
0:01 # 0 minutes, 1 seconds
1:01 # 1 minutes, 1 seconds
10:01 # 10 minutes, 1 seconds
1:10:01 # 1 hours, 10 minutes, 1 seconds
并parse導致(評論是我的解釋):
2022-10-24 00:00:00 #0 minutes, 0 seconds
2022-10-24 00:01:00 #1 minutes, 0 seconds
2022-10-24 01:01:00 #1 hours, 1 minutes, 0 seconds
2022-10-24 10:01:00 #10 hours, 1 minutes, 0 seconds
2022-10-24 01:10:01 #1 hours, 10 minutes, 1 seconds
即,如果字串不包含包含小時、分鐘、秒的完整時間碼,則parse似乎認為分鐘是小時,而秒是分鐘。
如何將串列動態決議為默認解釋為分鐘和秒而不是小時和分鐘,或者智能地調整時間碼以使其符合parse格式?
uj5u.com熱心網友回復:
這有點棘手,但應該可以:
import datetime
timecodes = ['0:00', '0:01', '1:01', '10:01', '1:10:01']
zeroes = ['0','0','0']
dt = []
for i in timecodes:
sep = i.split(':')
sep = zeroes[:3-len(sep)] sep
dt.append(str(datetime.timedelta(seconds = sum([int(s) * 60**(2-sep.index(s)) for s in sep]))))
輸出:
dt = ['0:00:00', '0:00:01', '0:01:01', '0:10:01', '1:10:01']
uj5u.com熱心網友回復:
另一種選擇是將持續時間組件以相反的順序(秒、分鐘、小時)映射到整數,并通過使用zip. sum最多可以得到總秒數,您可以轉換為 timedelta:
from datetime import timedelta
timecodes = ['0:00', '0:01', '1:01', '10:01', '1:10:01']
for t in timecodes:
print(
timedelta(seconds=sum(a*b for a, b in zip(map(int, t.split(":")[::-1]), (1, 60, 3600))))
)
0:00:00
0:00:01
0:01:01
0:10:01
1:10:01
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521371.html
