Python对比两个TXT文件列表行并输出匹配数结果异常排查
问题根因
- 原代码错误地将整行字符串直接拆分为单个字符的列表做交集统计,逗号、单个数字字符(比如多行间共有的'0'、'2')都会被算作匹配项,最终得到的统计值远高于实际相同数值的数量
- 正确逻辑应该是先按逗号分割每行内容,提取出独立的数值项后,再统计两个行数值集合的交集大小
修复代码(适配期望正确输出1)
该版本保留原始数值的格式(如01、02的前导0不做处理),统计完成后将匹配数量拼接到原始行首输出:
# 提前读取file2的所有行,避免重复IO操作 with open('C:\\Temp\\File2.txt', 'r', encoding='utf-8') as f: file2_lines = [line.strip() for line in f if line.strip()] with open('C:\\Temp\\File1.txt', 'r', encoding='utf-8') as f1, open('C:\\Temp\\Output.txt','w', encoding='utf-8') as f_out: for line1 in f1: line1 = line1.strip() if not line1: continue # 按逗号分割得到数值集合 nums1 = set(line1.split(',')) for line2 in file2_lines: nums2 = set(line2.split(',')) match_count = len(nums1 & nums2) f_out.write(f"{match_count},{line2}\n")
修复代码(适配期望正确输出2)
该版本会将所有数值转换为整数去掉前导0,最终输出的数值项均为整数格式:
with open('C:\\Temp\\File2.txt', 'r', encoding='utf-8') as f: # 提前处理file2的行,转成整数列表 file2_data = [] for line in f: line = line.strip() if not line: continue nums = [int(num) for num in line.split(',')] file2_data.append(nums) with open('C:\\Temp\\File1.txt', 'r', encoding='utf-8') as f1, open('C:\\Temp\\Output.txt','w', encoding='utf-8') as f_out: for line1 in f1: line1 = line1.strip() if not line1: continue nums1 = set(int(num) for num in line1.split(',')) for nums2 in file2_data: match_count = len(nums1 & set(nums2)) # 拼接匹配数和转成整数的数值项 output_line = ','.join([str(match_count)] + [str(n) for n in nums2]) + '\n' f_out.write(output_line)
内容的提问来源于stack exchange,提问作者J. Silva
相关产品推荐
相关产品推荐

