You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python按修改日期范围筛选文件并使用difflib比对的问题求助

问题分析与解决方案

我看到你在筛选特定时间范围的文件并使用difflib对比时遇到了问题,咱们一步步梳理问题所在并解决它:

核心问题点

你的代码里有两个关键错误,导致筛选逻辑完全偏离预期:

  1. 时间差计算错误:你写的max_days_ago = d.datetime.now() - d.timedelta(days=13 <= 15)中,13 <= 15是布尔判断,结果为True,而Python会把True当作整数1处理,所以这行实际是创建了一个1天的时间差,完全不符合你要的13-15天范围。
  2. 时间范围判断逻辑缺失:你只判断了filetime < max_days_ago,没有限定下限(比如文件修改时间要晚于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 = ''

# 先统一获取当前时间,避免循环中多次调用导致的时间偏差
now = d.datetime.now()

# 定义目标时间边界:
# file1范围:修改时间在【15天前 ↔ 13天前】之间
days_15_ago = now - d.timedelta(days=15)
days_13_ago = now - d.timedelta(days=13)
# file2范围:修改时间在【1天前 ↔ 现在】之间
days_1_ago = now - d.timedelta(days=1)

for file in f_list:
    # 获取文件的本地修改时间(Windows下无需额外时区转换)
    file_mtime = d.datetime.fromtimestamp(os.path.getmtime(file))
    
    # 匹配13-15天前的文件
    if days_15_ago <= file_mtime <= days_13_ago:
        file1 = file
        print(f"找到符合条件的file1: {os.path.basename(file)}")
    
    # 匹配1天以内的文件
    if days_1_ago <= file_mtime <= now:
        file2 = file
        print(f"找到符合条件的file2: {os.path.basename(file)}")

# 检查是否成功找到两个目标文件,避免后续报错
if not file1 or not file2:
    print("❌ 错误:未找到符合条件的file1或file2!")
    sys.exit(1)

# 使用difflib对比文件内容
with open(file1, 'r', encoding='utf-8') as f1, open(file2, 'r', encoding='utf-8') as f2:
    differ = difflib.Differ()
    diff_result = list(differ.compare(f1.readlines(), f2.readlines()))
    sys.stdout.writelines(diff_result)

关键修改说明

  • 清晰的时间边界:拆分出days_15_ago、days_13_ago和days_1_ago,明确划分你需要的时间区间,确保只选中目标文件(比如你的green.txt会被选为file1,blue.txt选为file2)。
  • 严谨的范围判断:使用<=双向限定时间范围,避免误选不符合要求的文件。
  • 错误检查:添加了文件存在性检查,防止因找不到目标文件导致后续代码崩溃。
  • 编码指定:打开文件时指定encoding='utf-8',避免Windows下可能出现的中文乱码问题。

额外提示

如果你的测试文件夹中存在多个符合条件的文件,当前代码会保留最后一个遍历到的文件。如果需要处理多文件场景,可以把file1、file2改成列表存储,再通过循环逐一对比。

内容的提问来源于stack exchange,提问作者Hellyeah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:26:32