Установка переменной для сравнения модификации файла между несколькими датами - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь сравнить два текстовых файла с определенной датой, но я в тупике. Я создал тестовую папку с тремя текстовыми файлами с датами изменения в возрасте от одного до 35 дней.

I.E: red.txt - 35 дней, blue.txt - один день, а green.txt - 15 дней.

Для моих двух сравниваемых файлов первый файл должен находиться в диапазоне от 13 до 15 дней, а второй - один день или меньше. Таким образом, в этом примере «green.txt» станет «file1», а «blue.txt» станет «file2», а затем будет сравниваться с difflib, но у меня проблемы с синтаксисом или, возможно, даже с логикой , Я использую datetime с timedelta, чтобы попытаться заставить это работать, но в моих результатах всегда будет храниться самый старый измененный файл, который за 15 дней для 'file1'. Вот мой код:

import os, glob, sys, difflib, datetime as d

p_path = 'C:/test/Text_file_compare_test/'
f_list = glob.glob(os.path.join(p_path, '*.txt'))
file1 = ''
file2 = ''
min_days_ago = d.datetime.now() - d.timedelta(days=1)
max_days_ago = d.datetime.now() - d.timedelta(days=13 <= 15)

for file in f_list:
    filetime = d.datetime.fromtimestamp(os.path.getmtime(file))

    if filetime < max_days_ago:
        file1 = file
    if filetime > min_days_ago:
        file2 = file

with open(file1) as f1, open(file2) as f2:
    d = difflib.Differ()
    result = list(d.compare(f1.readlines(), f2.readlines()))
    sys.stdout.writelines(result)

Я уверен, что с кодом что-то не так:

max_days_ago = d.datetime.now() - d.timedelta(days=13 <= 15)

Может быть, я просто не вижу в модуле datetime чего-то очевидного. Может кто-нибудь пролить свет на меня? Кроме того, это на Windows 10 Python 3.7.2. Заранее спасибо!

1 Ответ

1 голос
/ 09 мая 2019

Согласно моему комментарию, ваше d.timedelta(days=13 <= 15) не совсем верно, поскольку вы назначаете дни для логического значения true, которое будет эквивалентно d.timedelta(days=1). Вам нужно сохранить 3 отдельных момента времени и провести сравнение 13-15 дней с двумя разными датами. Код ниже демонстрирует то, что вы ищете, я верю:

import datetime as d

files = {
    'red': d.datetime.now() - d.timedelta(days=35),
    'blue': d.datetime.now() - d.timedelta(days=0, hours=12),
    'green': d.datetime.now() - d.timedelta(days=14),
}

days_ago_1 = d.datetime.now() - d.timedelta(days=1)
days_ago_13 = d.datetime.now() - d.timedelta(days=13)
days_ago_15 = d.datetime.now() - d.timedelta(days=15)

file1 = None
file2 = None
for file, filetime in files.items():
    if days_ago_13 >= filetime >= days_ago_15:
        file1 = file
    elif filetime > days_ago_1:
        file2 = file
    # need to break out of the loop when we are finished
    if file1 and file2:
        break

print(file1, file2)

отпечатков green blue

...