如何用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}")
关键细节解释
with语句:自动帮你管理文件资源,不用手动调用close(),避免忘记关闭文件导致的问题。strip()方法:读取文件行的时候,每行末尾会自带换行符\n,用这个方法可以去掉换行符和前后的空白,确保我们只对比实际内容(1或-1)。- 处理行数不一致:
zip()只会配对到两个文件中较短的那个的行数,所以循环结束后我们要分别检查两个文件是否还有剩余行,每一行剩余的都算差异。 - 计数逻辑:只有当两行内容不同时才加1,完全符合你描述的需求。
额外提醒
- 如果你的文件有特殊编码(比如非UTF-8),可以在
open()里加上encoding参数,比如open(file1_path, 'r', encoding='gbk')。 - 确保传入的文件路径是正确的,相对路径的话要和脚本在同一个目录,或者用绝对路径。
内容的提问来源于stack exchange,提问作者user9323924
相关产品推荐
相关产品推荐

