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

如何用Python逐行对比两个文件并统计差异次数?

嘿,这个需求其实很好实现,我给你写个实用的方案,还会解释关键细节:

核心思路

我们需要同时打开两个文件,逐行配对读取内容,对比每一行是否相同——如果不同就给计数器加1。另外还要考虑一种情况:如果两个文件的行数不一样,多出来的那些行也得算成差异(因为没有对应的行可以匹配)。

完整代码实现

def count_differences(file1_path, file2_path):
    difference_count = 0
    # 使用with语句同时打开两个文件,无需手动关闭,更安全
    with open(file1_path, 'r') as f1, open(file2_path, 'r') as f2:
        # 用zip函数把两个文件的行逐一配对,循环读取
        for line1, line2 in zip(f1, f2):
            # 先去掉每行的换行符和空白字符,避免因为换行/空格导致误判
            cleaned_line1 = line1.strip()
            cleaned_line2 = line2.strip()
            # 对比清理后的内容,不同则计数+1
            if cleaned_line1 != cleaned_line2:
                difference_count += 1
        
        # 处理其中一个文件行数更多的情况:剩下的每一行都算差异
        # 检查第一个文件是否还有未读取的行
        for _ in f1:
            difference_count += 1
        # 检查第二个文件是否还有未读取的行
        for _ in f2:
            difference_count += 1
    
    return difference_count

# 替换成你的实际文件路径,然后调用函数
diff_count = count_differences("file1.txt", "file2.txt")
print(f"两个文件的差异行数为: {diff_count}")

关键细节解释

  1. with语句:自动帮你管理文件资源,不用手动调用close(),避免忘记关闭文件导致的问题。
  2. strip()方法:读取文件行的时候,每行末尾会自带换行符\n,用这个方法可以去掉换行符和前后的空白,确保我们只对比实际内容(1或-1)。
  3. 处理行数不一致:zip()只会配对到两个文件中较短的那个的行数,所以循环结束后我们要分别检查两个文件是否还有剩余行,每一行剩余的都算差异。
  4. 计数逻辑:只有当两行内容不同时才加1,完全符合你描述的需求。

额外提醒

  • 如果你的文件有特殊编码(比如非UTF-8),可以在open()里加上encoding参数,比如open(file1_path, 'r', encoding='gbk')。
  • 确保传入的文件路径是正确的,相对路径的话要和脚本在同一个目录,或者用绝对路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:50:28