我正在尝试比较两个特定于日期的文本文件,但是我很困惑。我创建了一个测试文件夹,其中包含三个文本文件,修改日期在1到35天之间。
IE:red.txt的使用期限为35天,blue.txt的使用期限为一天,green.txt的使用期限为15天。
对于我比较的两个文件,第一个文件必须在13到15天之间,第二个文件必须在第二天或更短的时间内。因此,对于本示例,“ green.txt”将变为“ file1”,“ blue.txt”将变为“ file2”,然后与difflib
进行比较,但是语法上可能有麻烦,甚至逻辑。我正在将datetime
与timedelta
一起使用,以使其正常工作,但是我的结果将始终存储“ 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上。预先感谢!
答案 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