簡體   English   中英

在python中將字符串解析為時間值

[英]Parsing string to time value in python

我需要將以下字符串轉換為日期時間或不同格式的字符串。 我的輸入看起來像這些例子:

196小時26分13秒
95h 19m
45米28秒

我想要的字符串輸出是(但我的最終目標是將這些字符串轉換為datetime對象):

196:26:13
95:19:00
○時45分28秒

在Excel中,它將是[h]:mm:ss

注意:如您所見,小時數可能高於24小時。

我試圖用time.strptime()方法解析這個字符串,但它不適用於高於24的小時。我有一個正則表達式的解決方案,但我想知道是否有一種更直接的方法這個。 解決這個問題的最佳方法是什么?

這會給你時間增量:

from datetime import timedelta

def to_timedelta(time_string):
    units = {'h': 'hours', 'd': 'days', 'm': 'minutes', 's': 'seconds'}
    return timedelta(**{units[x[-1]]: int(x[:-1]) for x in time_string.split()})

測試:

times = ['196h 26m 13s', '95h 19m', '45m 28s']
for t in times:
    print(to_timedelta(t))

輸出:

8 days, 4:26:13
3 days, 23:19:00
0:45:28

timedelta接受了這些論點;

datetime.timedelta(days = 0,seconds = 0,microseconds = 0,milliseconds = 0,minutes = 0,hours = 0,weeks = 0)

使用此映射:

units = {'h': 'hours', 'd': 'days', 'm': 'minutes', 's': 'seconds'}

允許將字符串中的短單元映射到參數的相應名稱。 使用Pythons **語法,生成的字典可以用作單個參數,將轉換為匹配的關鍵字參數。

我們應該做的第一件事是使用正則表達式並使用timedelta而不是datetime。

import datetime
import re

regex = re.compile(r'((?P<hours>\d+?)h)?((?P<minutes>\d+?)m)?((?P<seconds>\d+?)s)?')

def parse_time(time_str):
    parts = regex.match(time_str)
    if not parts:
        return
    parts = parts.groupdict()
    time_params = {}
    for (name, param) in parts.items():
        if param:
            time_params[name] = int(param)
    return datetime.timedelta(**time_params)


L = ["196h 26m 13s", "95h 19m", "45m 28s"]

for l in L:
    print(parse_time(l))

輸出:

8 days, 4:00:00
3 days, 23:00:00
0:45:00

暫無
暫無

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

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