【问题标题】:Python 3.x timedelta using values from list/ unsupported type for timedelta component: listPython 3.x timedelta 使用来自 list/不支持类型的值作为 timedelta 组件:list
【发布时间】:2018-03-11 09:23:32
【问题描述】:

我绝对是 Python 的新手。我已经搜索了几个小时来找到解决我的问题的方法,但我只是没有解决我的问题。希望你能帮我解决这个问题。

我有一个包含日期和条目的列表,例如 2 小时前。现在,我喜欢通过从 today() 中减去文本值(2 小时前)来将列表转换为日期。

如果我在 timedelta 表达式中使用整数,则该脚本有效。一旦我要使用一个变量,我就会得到这个错误。

TypeError: unsupported type for timedelta minutes component: list

我已经尝试过str(time_delta)list(map(int, time_delta))

import datetime
import re

tday = datetime.datetime.today()

my_list = ['2 hours back', '5 mins back', '2 days back', '2018-03-10']
my_result = []

for item in my_list:
    if 'mins' in item:
        date_cor = re.findall('\d+', item)
        time_delta = datetime.timedelta(minutes=date_cor)  # date_cor
        new_item = tday - time_delta
        my_result.append(new_item)
    elif 'hours' in item:
        date_cor = re.findall('\d+', item)
        time_delta = datetime.timedelta(hours=5)  # date_cor
        new_item = tday - time_delta
        my_result.append(new_item)
    elif 'days' in item:
        date_cor = re.findall('\d+', item)
        time_delta = datetime.timedelta(days=5)  # date_cor
        new_item = tday - time_delta
        my_result.append(new_item)
    else:
        my_result.append(item)

for rows in my_result:
    print(rows)

我该如何解决这个问题?谢谢!

【问题讨论】:

    标签: python-3.x list timedelta


    【解决方案1】:

    re.findall() 返回list of string。要获取列表的第一个元素,我们使用date_cor[0]。然后在传递给timedelta之前转换为int

    date_cor = re.findall('\d+', item)
    # get first element of list, convert to integer
    min = int(date_cor[0])
    time_delta = datetime.timedelta(minutes=min)
    

    【讨论】:

    • 已经尝试过您的解决方案。现在我收到以下错误: time_delta = datetime.timedelta(hours=date_cor[0]) # date_cor TypeError: unsupported type for timedelta hours component: str
    • 这是因为re.findall() 返回string 的列表。请参阅上面的答案,将str 转换为int,然后再传递给timedelta
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 2017-09-16
    • 2022-12-05
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多