设置变量以比较多个日期之间的文件修改

时间:2019-05-09 13:04:03

标签: python-3.x datetime timedelta

我正在尝试比较两个特定于日期的文本文件,但是我很困惑。我创建了一个测试文件夹,其中包含三个文本文件,修改日期在1到35天之间。

IE:red.txt的使用期限为35天,blue.txt的使用期限为一天,green.txt的使用期限为15天。

对于我比较的两个文件,第一个文件必须在13到15天之间,第二个文件必须在第二天或更短的时间内。因此,对于本示例,“ green.txt”将变为“ file1”,“ blue.txt”将变为“ file2”,然后与difflib进行比较,但是语法上可能有麻烦,甚至逻辑。我正在将datetimetimedelta一起使用,以使其正常工作,但是我的结果将始终存储“ file1”超过15天的最早的修改文件。这是我的代码:

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 个答案:

答案 0 :(得分:1)

根据我的评论,您将d.timedelta(days=13 <= 15)分配给布尔值true的日子并不正确,布尔值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