#python #list #datetime
#python #Список #datetime
Вопрос:
В настоящее время я изучаю строковые методы. Однако я столкнулся с этой проблемой, когда я получаю ошибку ValueError.
У меня есть список именованных result_list
списков, в которых первый индекс строки — это отметка даты / времени, а второй индекс — количество комментариев. Меня попросили сделать следующее:
- Извлеките час из даты, которая является первым элементом строки.
- Используйте
datetime.strptime()
метод для анализа даты и создания объекта datetime.
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:Anaconda3lib_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:Anaconda3lib_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. Однако я не уверен, с чего начать решение этой проблемы.
Ответ №1:
result_list
это плоский список, в нем нет групп, такrow[0]
8
же как и значение со значением с индексом 0.- Как только значение даты будет правильно преобразовано в datetime, используйте различные методы, например
.hour
, для извлечения требуемого значения. - Один из вариантов — использовать понимание списка для группировки даты и связанного количества комментариев.
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'
# group each date and count together
rl_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 comprehension
rl_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'],
[datetime.datetime(2015, 11, 22, 13, 43), '29.0']]
# alternatively, iterate through rl_updated1, before converting to a date format
for group in rl_updated1:
dt = group[0]
dt = datetime.striptime(dt, date_format)
- Сохраните плоский список и выберите даты из индексов, где
i % 2 == 0
for i, v in enumerate(result_list):
if i%2 == 0:
time_dt = datetime.strptime(v, date_format)
print(time_dt)
else:
comment = v
print(v)
[out]:
2016-08-16 09:55:00
6.0
2015-11-22 13:43:00
29.0