Hellyeah
Hellyeah

Reputation: 145

Setting variable to compare file modification between multiple dates

I'm trying to compare two text files that are date specific, but I'm stumped. I created a test folder that has three text files in it with modified dates between one and 35 days old.

I.E: red.txt is 35 days old, blue.txt is one day old, and green.txt is 15 days old.

For my two compared files, the first file must be between a range of 13-15 days and the second one day old or less. So for this example, 'green.txt' will become 'file1' and 'blue.txt' will become 'file2' and then be compared with difflib, but I'm having trouble with the syntax, or maybe even the logic. I am using datetime with timedelta to try to get this working, but my results will always store the oldest modified file that is past 15 days for 'file1'. Here's my code:

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)

I'm certain there is something wrong with code:

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

Maybe I'm just not seeing something in the datetime module that's obvious. Can someone shed some light for me? Also, this is on Windows 10 Python 3.7.2. Thanks in advance!

Upvotes: 1

Views: 70

Answers (1)

Vince W.
Vince W.

Reputation: 3785

As per my comment, your d.timedelta(days=13 <= 15) isn't quite right as you are assigning days to a boolean value of true, which will be equivalent to d.timedelta(days=1). You need to store 3 separate time points and do your 13-15 day comparison against two different dates. The code below demonstrates what you are looking for I believe:

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)

prints green blue

Upvotes: 1

Related Questions