Отфильтруйте и удалите определенные элементы даты - PullRequest
0 голосов
/ 24 марта 2020

Есть список дат

['2020-03-24 09:00:00', '2020-03-24 12:00:00', '2020-03-24 15:00:00', '2020-03-24 18:00:00', '2020-03-24 21:00:00', '2020-03-25 00:00:00', '2020-03-25 03:00:00', '2020-03-25 06:00:00', '2020-03-25 09:00:00', '2020-03-25 12:00:00', '2020-03-25 15:00:00', '2020-03-25 18:00:00', '2020-03-25 21:00:00']

Я хочу сделать две вещи:

  • Я хочу вытащить все даты, связанные с сегодняшним днем ​​(и завтра) ), как я хочу, чтобы все 2020-3-24 s были отфильтрованы от остальных дат.

ValueError: x и y должны иметь одинаковое первое измерение, но иметь формы (0,) и (40,)

Я продолжаю получать ошибки форм, потому что они не соответствуют друг другу, как мне это исправить?

date_times = []
for i in raw_date_times:
    date =  datetime.strptime(i, '%Y-%m-%d %H:%M:%S').date()
    if date == today:
        date_times.append(i)

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Опция с использованием регулярных выражений, re:

from datetime import datetime
import re

d =  datetime.now()
date_today = re.search("([0-9]{4}\-[0-9]{2}\-[0-9]{2})", str(d)).group(0)
ll = ['2020-03-24 09:00:00', '2020-03-24 12:00:00', '2020-03-24 15:00:00', '2020-03-24 18:00:00', '2020-03-24 21:00:00', '2020-03-25 00:00:00', '2020-03-25 03:00:00', '2020-03-25 06:00:00', '2020-03-25 09:00:00', '2020-03-25 12:00:00', '2020-03-25 15:00:00', '2020-03-25 18:00:00', '2020-03-25 21:00:00']
desired_dates = [s for s in ll if date_today in s]
desired_times = [re.sub(date_today, '',
                        re.search("([0-9]{2}\:[0-9]{2})", str(s)).group(0)) for s in desired_dates]

, которая дает следующий вывод:

['2020-03-24 09:00:00', '2020-03-24 12:00:00', '2020-03-24 15:00:00', '2020-03-24 18:00:00', '2020-03-24 21:00:00']
['09:00', '12:00', '15:00', '18:00', '21:00']
2 голосов
/ 24 марта 2020

Взял удар, и это то, что я придумал ...

import datetime

start = ['2020-03-24 09:00:00', '2020-03-24 12:00:00', '2020-03-24 15:00:00', '2020-03-24 18:00:00', '2020-03-24 21:00:00', '2020-03-25 00:00:00', '2020-03-25 03:00:00', '2020-03-25 06:00:00', '2020-03-25 09:00:00', '2020-03-25 12:00:00', '2020-03-25 15:00:00', '2020-03-25 18:00:00', '2020-03-25 21:00:00']

new = [datetime.datetime.strptime(item, '%Y-%m-%d %H:%M:%S') for item in start] #Setting up each DT object at the beginning makes it much easier later on...

final_times = [] #initiate a final list for the times you desire

for date in new:
    if date.date() == datetime.datetime.today().date(): #last .date() on today is needed to compare str vs str
        final_times.append(date.strftime('%H:%M')) #only add the hour:minute

print(final_times) #['09:00', '12:00', '15:00', '18:00', '21:00']

Существует также ссылка на документацию по дате и времени , которая описывает способ использования объектов даты и времени в более глубина

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...