如何使用Python对比两个不同目录下同名文件的逐行内容
目录同名文件逐行对比实现(Python)
需求说明
- 对dir1、dir2两个目录下的同名文件进行逐行对比
- 若两个文件对应行的前两个逗号分隔的数值相等,输出该行完整内容
完整实现代码
import os dir1 = "dir1" dir2 = "/dir2" # 取两个目录的文件名交集,直接得到待对比的同名文件,无需双层循环遍历 common_files = set(os.listdir(dir1)) & set(os.listdir(dir2)) for filename in common_files: # 拼接得到两个目录下对应文件的完整路径 file1_path = os.path.join(dir1, filename) file2_path = os.path.join(dir2, filename) # 过滤子目录,仅处理文件 if not os.path.isfile(file1_path) or not os.path.isfile(file2_path): continue print(f"===== 匹配结果(文件:{filename}) =====") # 同时打开两个文件逐行读取 with open(file1_path, 'r', encoding='utf-8') as f1, open(file2_path, 'r', encoding='utf-8') as f2: # 遍历两个文件的对应行,行数不一致时自动忽略多出来的行 for line1, line2 in zip(f1, f2): line1 = line1.strip() line2 = line2.strip() # 跳过空行 if not line1 or not line2: continue # 按逗号分割取前两位转成数值对比,异常行直接跳过 try: prefix1 = [int(item.strip()) for item in line1.split(',')[:2]] prefix2 = [int(item.strip()) for item in line2.split(',')[:2]] except ValueError: continue # 前两位数值相等则输出完整行 if prefix1 == prefix2: print(line2)
逻辑说明
- 用集合取文件名交集对比双层循环遍历,文件数量多的时候效率提升明显
- 内置了空行、非数值格式行的异常处理,避免运行报错
- 如果需要处理两个文件行数不一致的场景,可以把
zip替换为itertools.zip_longest自行扩展逻辑 - 输出逻辑可根据需求调整,比如同时输出两个文件的匹配行、输出匹配行号等
内容的提问来源于stack exchange,提问作者reddevilsutd1
相关产品推荐
相关产品推荐

