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

如何用类似diff格式的带色彩方式展示两个字符串的差异?

Python实现字符串差异的可视化对比

如果你需要直观展示两个字符串的差异,以下几个Python库可以实现需求,包括你提到的difflib(可能之前没用到正确的用法):

1. 使用difflib基础对比(终端文本标记)

difflib默认按行对比,但可以拆分字符串为单个字符列表来实现逐字符对比,通过符号标记差异:

  • - 表示仅在第一个字符串中存在的内容
  • + 表示仅在第二个字符串中存在的内容
  • 表示两个字符串都有的内容

代码示例:

import difflib

str1 = "SkyWalker"
str2 = "kWalkerr"

# 将字符串拆分为单个字符的列表
seq1 = list(str1)
seq2 = list(str2)

differ = difflib.Differ()
diff_result = differ.compare(seq1, seq2)

print('\n'.join(diff_result))

输出示例:

- S
+ k
  k
  y
  W
  a
  l
  k
  e
  r
+ r

2. 终端彩色高亮差异

配合termcolor库,给差异内容添加颜色,更直观:
先安装依赖:pip install termcolor

代码示例:

from termcolor import colored
import difflib

str1 = "SkyWalker"
str2 = "kWalkerr"

seq1 = list(str1)
seq2 = list(str2)

differ = difflib.Differ()
diff_lines = list(differ.compare(seq1, seq2))

visual_output = []
for line in diff_lines:
    if line.startswith('-'):
        visual_output.append(colored(line[2:], 'red'))
    elif line.startswith('+'):
        visual_output.append(colored(line[2:], 'green'))
    else:
        visual_output.append(line[2:])

print(''.join(visual_output))

终端中会看到红色的S、绿色的k和末尾的r,清晰区分差异。

3. 使用diff_match_patch(智能差异识别)

Google的diff_match_patch库专门处理文本差异,支持更智能的语义化差异合并,适合长字符串对比:
先安装依赖:pip install diff-match-patch

代码示例:

from diff_match_patch import diff_match_patch

dmp = diff_match_patch()
str1 = "SkyWalker"
str2 = "kWalkerr"

# 获取并优化差异结果
diffs = dmp.diff_main(str1, str2)
dmp.diff_cleanupSemantic(diffs)

# 生成彩色高亮的字符串
visual_diff = []
for diff_type, text in diffs:
    if diff_type == -1:
        # 仅在str1中的内容,红色
        visual_diff.append(f"\033[91m{text}\033[0m")
    elif diff_type == 1:
        # 仅在str2中的内容,绿色
        visual_diff.append(f"\033[92m{text}\033[0m")
    else:
        visual_diff.append(text)

print(''.join(visual_diff))

4. 生成网页可视化对比

如果需要更美观的网页展示,difflib的HtmlDiff可以生成带颜色的HTML对比页面:

代码示例:

import difflib

str1 = "SkyWalker"
str2 = "kWalkerr"

# 生成HTML内容
html_content = difflib.HtmlDiff().make_file([str1], [str2])

# 保存为HTML文件
with open('string_diff.html', 'w', encoding='utf-8') as f:
    f.write(html_content)

打开生成的string_diff.html文件,就能看到带彩色标记的网页版对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:45:33