Я пытаюсь извлечь время из отдельных строк, где в одной строке будут тексты, отличные от только времени. Например, s = 'Dates : 12/Jul/2019 12/Aug/2019, Loc : MEISHAN BRIDGE, Time : 06:00 17:58'
.
Я пытался использовать модуль datefinder
, например:
from datetime import datetime as dt
import datefinder as dfn
for m in dfn.find_dates(s):
print(dt.strftime(m, "%H:%M:%S"))
Что дает мне следующее:
17:58:00
В этом случае время "06:00"
пропускается. Теперь, если я попытаюсь без datefinder
только с модулем datetime
, как это:
dt.strftime(s, "%H:%M")
Он уведомляет меня, что входные данные уже должны быть объектом datetime, а не строкой со следующей ошибкой:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'str'
Поэтому я попытался использовать модуль dateutil
для анализа этой строки s
в объекте datetime с помощью:
from dateutil.parser import parse
parse(s)
но теперь он теперь говорит что моя строка не в правильном формате (который в большинстве случаев не будет в любом фиксированном формате), показывая мне эту ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/michael/anaconda3/envs/sec_img/lib/python3.7/site-packages/dateutil/parser/_parser.py", line 1358, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/home/michael/anaconda3/envs/sec_img/lib/python3.7/site-packages/dateutil/parser/_parser.py", line 649, in parse
raise ValueError("Unknown string format:", timestr)
ValueError: ('Unknown string format:', '12/Jul/2019 12/Aug/2019 MEISHAN BRIDGE 06:00 17:58')
Я думал о получении времени с регулярным выражением, как
import re
p = r"\d{2}\:\d{2}"
times = [i.group() for i in re.finditer(p, s)]
# Gives me ['06:00', '17:58']
Но для этого нужно, чтобы я снова проверил, соответствуют ли эти фрагменты регулярному выражению времени или нет, потому что даже "99:99"
может быть правильно сопоставлено с регулярным выражением и неверно указано как время. Можно ли обойтись без регулярных выражений, чтобы получить все время из одной строки?
Обратите внимание, что строка может содержать или не содержать какую-либо дату, но она всегда будет содержать время. Даже если она содержит дату, формат даты может быть любым на земле, а также эта строка может содержать или не содержать другие не относящиеся к делу тексты.