Какой самый простой способ сравнить даты? - PullRequest
1 голос
/ 06 апреля 2019

Итак, у меня есть текстовый файл в этом формате:

[2018-04-04 11:46:05.879927]c:\windows\addins\FXSEXT.ecf,[created date]2018-04-12 02:35:21,[modified date]2018-04-12 02:35:21,[access date]2018-04-12 02:35:21,[READ]True,[WRITE]True,[EXECUTED]True
[2018-04-05 15:46:15.336327]c:\windows\System32\AcGenral.dll,[created date]2018-09-23 04:14:27,[modified date]2018-08-09 12:13:19,[access date]2018-09-23 04:14:27,[READ]True,[WRITE]True,[EXECUTED]True
[2018-04-05 15:46:10.556427]c:\windows\SysWOW64\AcGenral.dll,[created date]2018-09-23 04:14:30,[modified date]2018-08-09 11:20:24,[access date]2018-09-23 04:14:30,[READ]True,[WRITE]True,[EXECUTED]True
[2018-04-05 12:46:12.596327]c:\windows\WinSxS\amd64_microsoft-windows-a..ence-mitigations-c3_31bf3856ad364e35_10.0.17134.112_none_edebf6774847bf6e\AcGenral.dll,[created date]2018-06-19 22:49:33,[modified date]2018-06-19 22:49:33,[access date]2018-06-19 22:49:33,[READ]True,[WRITE]True,[EXECUTED]True
[2019-04-02 15:46:12.596327]c:\windows\WinSxS\amd64_microsoft-windows-a..ence-mitigations-c3_31bf3856ad364e35_10.0.17134.165_none_edb8e7b9486d9728\AcGenral.dll,[created date]2018-08-06 06:10:19,[modified date]2018-07-06 16:53:16,[access date]2018-08-06 06:10:19,[READ]True,[WRITE]True,[EXECUTED]True
[2018-04-05 06:46:32.596327]c:\windows\WinSxS\amd64_microsoft-windows-a..ence-mitigations-c3_31bf3856ad364e35_10.0.17134.1_none_f1a4c5155b750465\AcGenral.dll,[created date]2018-04-12 02:34:40,[modified date]2018-06-19 22:53:10,[access date]2018-06-19 22:53:09,[READ]True,[WRITE]True,[EXECUTED]True
[2018-04-05 15:46:52.596327]c:\windows\WinSxS\amd64_microsoft-windows-a..ence-mitigations-c3_31bf3856ad364e35_10.0.17134.254_none_edc2b94148665f07\AcGenral.dll,[created date]2018-09-23 04:14:27,[modified date]2018-08-09 12:13:19,[access date]2018-09-23 04:14:27,[READ]True,[WRITE]True,[EXECUTED]True
[2018-04-01 13:46:12.798327]c:\windows\WinSxS\wow64_microsoft-windows-a..ence-mitigations-c3_31bf3856ad364e35_10.0.17134.112_none_f840a0c97ca88169\AcGenral.dll,[created date]2018-06-19 22:49:39,[modified date]2018-06-19 22:49:39,[access date]2018-06-19 22:49:39,[READ]True,[WRITE]True,[EXECUTED]True
[2018-04-05 15:46:12.431127]c:\windows\WinSxS\wow64_microsoft-windows-

И все, что мне нужно сделать, это получить конкретную дату и строку для поиска.И с этой даты мне нужно построчно зацикливать внутри моего текстового файла и возвращать True, если заданная строка находится внутри текстового файла или False в противном случае (мне нужно искать только внутри строки, что дата после этой датытекстовый файл отсортирован)

Итак, сначала у меня есть это регулярное выражение, которое анализирует datetime в начале каждой строки:

date - это время, которое мне нужно искать...

count = 0
text_file = open(file, 'r')
lines = text_file.readlines()
for line in lines:
    maches = regex.findall('\[(.*?)\]', line)
    if len(maches) > 0:
        currentdate = maches[0]
        count = count + 1
        if currentdate > date:
            # here I know  that from here all the next lines dates are after the given date.

Затем мне нужно перебрать все строки и проверить, является ли данная дата (переменная date) до или после текущей даты.Если я обнаружил, что строка datetime больше заданной даты, я знаю, что мне нужно искать строку из этой строки.

Так что мой вопрос, как сравнить 2 datetime с?

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Поскольку отметка времени в text всегда находится в начале каждой строки, вы можете просто нарезать ее, а не использовать регулярное выражение.

from datetime import datetime

file = 'text.txt'
search_date = '2018-04-04'
search_string = 'WOW'

text_file = open(file, 'r')
lines = text_file.readlines()
search_date = datetime.strptime(search_date, '%Y-%m-%d')            # Convert to datetime

for line in lines:
    date = line[1:27]                                               # Slice date from line
    date = datetime.strptime(date, '%Y-%m-%d %H:%M:%S.%f')          # Convert to datetime
    if (date > search_date) and (search_string in line):
        print(line)

Для Python> = 3.7.0 вы можетеиспользуйте datetime.fromisoformat() вместо datetime.strptime().

date = datetime.fromisoformat(date)

0 голосов
/ 06 апреля 2019

Я не вижу, куда вы превращаете вашу строку с регулярным выражением в datetime объект. Но это должно быть достаточно легко, учитывая формат даты и времени. Ознакомьтесь с документами для модуля datetime.

После того, как вы проанализировали объект datetime из строки и предположили, что переменная date уже является объектом datetime, вы можете использовать обычный оператор > для сравнения двух объектов datetime. Класс datetime перегружает все обычные операторы сравнения, так что это довольно стандартно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...