如何从列表中选择交替值以转换为日期时间?

我目前正在学习字符串方法。但是,我遇到了这个问题,出现了 ValueError。

我有一个名为列表的列表,result_list其中行的第一个索引是日期/时间戳,第二个索引是评论数。我被要求执行以下操作:

  • 从日期中提取小时,这是该行的第一个元素。

  • 使用该datetime.strptime()方法解析日期并创建日期时间对象。

from datetime import datetime


# here is your list of values

result_list = ['8/16/2016 9:55', '6.0', '11/22/2015 13:43', '29.0']


# set the format

date_format = '%m/%d/%Y %H:%M'


for row in result_list:

    time = row[0]

    time_dt = datetime.strptime(time, date_format)

错误

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-6-ecf5afb3f99e> in <module>

      9 for row in result_list:

     10     time = row[0]

---> 11     time_dt = datetime.strptime(time, date_format)


e:\Anaconda3\lib\_strptime.py in _strptime_datetime(cls, data_string, format)

    566     """Return a class cls instance based on the input string and the

    567     format string."""

--> 568     tt, fraction, gmtoff_fraction = _strptime(data_string, format)

    569     tzname, gmtoff = tt[-2:]

    570     args = tt[:6] + (fraction,)


e:\Anaconda3\lib\_strptime.py in _strptime(data_string, format)

    347     found = format_regex.match(data_string)

    348     if not found:

--> 349         raise ValueError("time data %r does not match format %r" %

    350                          (data_string, format))

    351     if len(data_string) != found.end():


ValueError: time data '8' does not match format '%m/%d/%Y %H:%M'

我假设我收到错误是由于datetime.strptime()构造函数期望值为 08 而不是 8。但是,我不确定从哪里开始解决此问题。


一只甜甜圈
浏览 96回答 1
1回答

慕娘9325324

result_list是一个平面列表,没有组,索引 0 处的值的 ,row[0]也是如此。8将日期值正确转换为日期时间后,请使用各种方法(例如 ).hour来提取所需的值。一种选择是使用列表理解对日期和相关评论计数进行分组。from datetime import datetime# here is your list of valuesresult_list = ['8/16/2016 9:55', '6.0', '11/22/2015 13:43', '29.0']# set the formatdate_format = '%m/%d/%Y %H:%M'# group each date and count togetherrl_updated1 = [result_list[k:k+2] for k in range(0, len(result_list), 2)]print(rl_updated1)[out]:[['8/16/2016 9:55', '6.0'], ['11/22/2015 13:43', '29.0']]# convert to a datetime format in a list comprehensionrl_updated2 = [[datetime.strptime(v[0], date_format), v[1]] for v in rl_updated1]print(rl_updated2)[out]:[[datetime.datetime(2016, 8, 16, 9, 55), '6.0'],&nbsp;[datetime.datetime(2015, 11, 22, 13, 43), '29.0']]# alternatively, iterate through rl_updated1, before converting to a date formatfor group in rl_updated1:&nbsp; &nbsp; dt = group[0]&nbsp; &nbsp; dt = datetime.striptime(dt, date_format)保持平面列表,并从索引中选择日期,其中i % 2 == 0for i, v in enumerate(result_list):&nbsp; &nbsp; if i%2 == 0:&nbsp; &nbsp; &nbsp; &nbsp; time_dt = datetime.strptime(v, date_format)&nbsp; &nbsp; &nbsp; &nbsp; print(time_dt)&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; comment = v&nbsp; &nbsp; &nbsp; &nbsp; print(v)[out]:2016-08-16 09:55:006.02015-11-22 13:43:0029.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python