Не беспокойтесь регулярным выражением.Вы знаете формат строки.Просто разделите его:
from datetime import datetime
for l in lines:
line_date, line_time, rest_of_line = l.split(maxsplit=2)
print([line_date, line_time, rest_of_line])
# ['2018-09-08', '10:34:49', '10.0 MiB path/of/a/directory']
Обратите особое внимание на использование аргумента maxsplit
.Это предотвращает расщепление по размеру или пути.Мы можем сделать это, потому что мы знаем, что дата имеет один пробел в середине и один пробел после нее.
Если размер всегда будет иметь один пробел в середине и один пробел после него, мы можем увеличить его до 4разделяет, чтобы разделить размер, также:
for l in lines:
line_date, line_time, size_quantity, size_units, line_path = l.split(maxsplit=4)
print([line_date, line_time, size_quantity, size_units, line_path])
# ['2018-09-08', '10:34:49', '10.0', 'MiB', 'path/of/a/directory']
Обратите внимание, что дополнительные смежные пробелы и пробелы в пути не запутывают его:
l = "2018-09-08 10:34:49 10.0 MiB path/of/a/direct ory"
line_date, line_time, size_quantity, size_units, line_path = l.split(maxsplit=4)
print([line_date, line_time, size_quantity, size_units, line_path])
# ['2018-09-08', '10:34:49', '10.0', 'MiB', 'path/of/a/direct ory']
Вы можете объединить детали обратно, еслинеобходимо:
line_size = size_quantity + ' ' + size_units
Если вам нужна временная метка для чего-либо, вы можете ее проанализировать:
# 'T' could be anything, but 'T' is standard for the ISO 8601 format
timestamp = datetime.strptime(line_date + 'T' + line_time, '%Y-%m-%dT%H:%M:%S')