Вот рабочий пример использования регулярных выражений благодаря пакету re
:
>>> import re
>>> line = "-rw-r--r-- 1 jttoivon hyad-all 25399 Nov 2 21:25 exception_hierarchy.pdf"
>>> pattern = r"([\d]+)\s+([A-z]+)\s+(\d{1,2})\s+(\d{1,2}):(\d{1,2})\s+(.+)$"
>>> output_tuple = re.findall(pattern, line)[0]
>>> print(output_tuple)
('25399', 'Nov', '2', '21', '25', 'exception_hierarchy.pdf')
>>> size, month, day, hour, minute, filename = output_tuple
Большая часть logi c кодируется в необработанной переменной pattern
. Это очень легко, хотя, если вы посмотрите на это по частям. Смотрите ниже, с новыми строками, которые помогут вам прочитать:
([\d]+) # means basically group of digits (size)
\s+ # means one or more spaces
([A-z]+) # means one or more letter (month)
\s+ # means one or more spaces
(\d{1,2}) # one or two digits (day)
\s+ # means one or more spaces
(\d{1,2}) # one or two digits (hour)
: # looking for a ':'
(\d{1,2}) # one or two digits (minute)
\s+ # means one or more spaces
(.+) # anything basically
$ # until the string ends
Кстати, вот рабочий пример, не использующий re
(потому что это на самом деле здесь не обязательно):
>>> line = "-rw-r--r-- 1 jttoivon hyad-all 25399 Nov 2 21:25 exception_hierarchy.pdf"
>>> size, month, day, hour_minute, filename = line.split("hyad-all")[1].strip().split()
>>> hour, minute = hour_minute.split(":")
>>> print(size, month, day, hour, minute, filename)
25399 Nov 2 21 25 exception_hierarchy.pdf