Как получить дату и время в начале каждой строки?
У меня есть текстовый файл, а внутри прописаны разные строки.
Например:
2020-10-31 0:01:02 some text
2020-10-31 1:01:02 second line
2020-11-21 11:01:02 another line
Как мне получить дату и время каждой строки?
Ответы (3 шт):
Автор решения: Jack_oS
→ Ссылка
если после чтения у вас есть список строк:
lines = [
'2020-10-31 0:01:02 some text',
'2020-10-31 1:01:02 second line',
'2020-11-21 11:01:02 another line'
]
разбейте строку по пробелу и дополните время нулями:
for l in lines:
parts = l.split()
print(' '.join((parts[0], parts[1].zfill(8))))
выведет:
2020-10-31 00:01:02
2020-10-31 01:01:02
2020-11-21 11:01:02
строку можно преобразовать в datetime:
from datetime import datetime
date_string = "2020-11-21 11:01:02"
print(datetime.fromisoformat(date_string))
2020-11-21 11:01:02
Автор решения: strawdog
→ Ссылка
Для коллекции (сразу получаем список объектов datetime):
from dateutil.parser import parse
import re
strings = [
'2020-10-31 0:01:02 some text',
'2020-10-31 01:01:02 second line',
'2020-11-21 11:01:02 another line'
]
res = [parse(re.match(r"([\d -:]+)\s", x).group(1)) for x in strings]
print(res)
res:
[datetime.datetime(2020, 10, 31, 0, 1, 2), datetime.datetime(2020, 10, 31, 1, 1, 2), datetime.datetime(2020, 11, 21, 11, 1, 2)]
Автор решения: Namerek
→ Ссылка
import re
from datetime import datetime
lines = [
'2020-10-31 00:01:02 some text',
'2020-10-31 01:01:02 second line',
'2020-11-21 11:01:02 another line'
]
def get_datetime(text: str):
date_string = res.group(0) if (res := re.search(r'^[\d-]+?\s[\d:]+', text)) else None
if isinstance(date_string, str):
return datetime.fromisoformat(date_string)
return None
print(*map(get_datetime, lines), sep='\n')
# 2020-10-31 00:01:02
# 2020-10-31 01:01:02
# 2020-11-21 11:01:02
Ну или так
lines = [
'2020-10-31 00:01:02 some text',
'2020-10-31 01:01:02 second line',
'2020-11-21 11:01:02 another line'
]
print(
*map(
lambda x: datetime.fromisoformat(res.group(0)) if (res := re.search(r'^[\d-]+?\s[\d:]+', x)) else None,
lines
), sep='\n'
)
# 2020-10-31 00:01:02
# 2020-10-31 01:01:02
# 2020-11-21 11:01:02