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

如何使用Difflib库让ndiff()忽略时间戳进行文本对比?

解决Difflib.ndiff()忽略时间戳对比的问题

要让difflib.ndiff()忽略文本行开头的时间戳,核心思路是先预处理每行文本,移除时间戳后再执行对比,最后将差异结果映射回原文本行即可。

具体实现步骤

1. 定义时间戳预处理函数

利用正则表达式匹配并移除每行开头的mm/dd/yyyy hh:mm:ss格式时间戳:

import re

timestamp_regex = re.compile(r'^\d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2} ')

def strip_timestamp(line):
    # 移除行首时间戳,返回核心内容
    return timestamp_regex.sub('', line.strip())

2. 预处理文本并执行对比

对两个文本的所有行先移除时间戳,再调用ndiff()对比预处理后的内容,最后将差异标签与原文本行对应:

import difflib

# 示例输入文本
text1 = [
    'mm/dd/yyyy hh:mm:ss Report content shjsjsjsjdj',
    'mm/dd/yyyy hh:mm:ss more Report to check content shjsjsjsjdj'
]
text2 = [
    'mm/dd/yyyy hh:mm:ss same Report content to text1 shjsjsjsjdj',
    'mm/dd/yyyy hh:mm:ss more different Report to check content shjsjsjsjdj'
]

# 预处理:移除所有行的时间戳
processed_1 = [strip_timestamp(line) for line in text1]
processed_2 = [strip_timestamp(line) for line in text2]

# 对比预处理后的内容
diff_lines = difflib.ndiff(processed_1, processed_2)

# 将差异结果映射回原文本行
final_diff = []
t1_idx, t2_idx = 0, 0
for diff_line in diff_lines:
    tag = diff_line[0]
    if tag == '-':
        # 该行仅存在于text1
        final_diff.append(f"{tag} {text1[t1_idx]}")
        t1_idx += 1
    elif tag == '+':
        # 该行仅存在于text2
        final_diff.append(f"{tag} {text2[t2_idx]}")
        t2_idx += 1
    elif tag == ' ':
        # 两行预处理后内容一致
        final_diff.append(f"{tag} {text1[t1_idx]}")
        t1_idx += 1
        t2_idx += 1

# 输出最终差异结果
for line in final_diff:
    print(line)

结果说明

运行后会输出带差异标签的原文本行,其中:

  • - 标记的行仅属于text1
  • + 标记的行仅属于text2
  • 标记的行预处理后内容一致(忽略时间戳后无差异)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:52:47