Как получить дату и время в начале каждой строки?

У меня есть текстовый файл, а внутри прописаны разные строки.

Например:

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
→ Ссылка