Из ваших примеров данных кажется, что вам не нужно проверять наличие трехбуквенного идентификатора после даты - он всегда здесь. Добавьте последние три буквы в регулярное выражение, если это неверное предположение. Кроме того, добавьте больше группировок по мере необходимости, чтобы группы регулярных выражений были полезны для вас. В любом случае:
import re
dtre = re.compile(r'^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{2} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}')
[line for line in file if dtre.match(line)]
Оберните его в оператор with
или что-то еще, чтобы открыть ваш файл, а затем выполните любую необходимую обработку в списке, который будет создан.
Другой возможностью было бы использование выражения-генератора вместо понимания списка (для этого нужно заменить внешние [
и ]
на (
и )
). Это полезно, если вы выводите результаты куда-то на ходу, файл большой и вам не нужно хранить все это в памяти для разных целей. Только не закрывайте файл, прежде чем использовать весь генератор, если вы используете этот подход!
Кроме того, вы можете использовать встроенную функцию разбора datetime
:
import datetime
for line in file:
try:
# the line[:24] bit assumes you're always going to have three-digit
# µs part
dt = datetime.datetime.strptime(line[:24], '%b %d %Y %H:%M:%S.%f')
except ValueError:
# a ValueError means the beginning of the line isn't parseable as datetime
continue
# do something with the line; the datetime is already parsed and stored in dt
Вероятно, будет лучше, если вы все равно создадите объект datetime.datetime
.