如何逐列比对同一文件内3行数据,存在不匹配则返回FALSE?
解决方案:逐列对比CSV中3行数据并输出结果
嘿,针对你需要逐列对比同一CSV文件中3行数据,不匹配列标记FALSE的需求,我写了一个Python脚本可以直接实现,还能完美匹配你给出的示例格式。
实现思路
- 读取CSV内容,处理
|分隔符和字段前后的空格(避免空格导致的误判) - 提取表头和需要对比的3行数据
- 逐列检查3行数据的对应值是否全部一致,生成结果行(示例里
NAME、COMPARNY作为标识列留空,如需对比所有列可调整代码) - 按照原CSV的格式输出内容和结果行
代码实现
import csv # 读取目标CSV文件(替换成你的文件路径) with open('your_data.csv', 'r') as file: csv_content = file.read() # 解析每一行,清理字段空格 processed_rows = [] for line in csv_content.splitlines(): # 按|分割字段,去除前后空格,过滤空字段(因为每行末尾有|) fields = [field.strip() for field in line.split('|') if field.strip()] processed_rows.append(fields) # 拆分表头和要对比的3行数据 header = processed_rows[0] data_rows = processed_rows[1:4] # 假设文件里只有这3行待对比数据 # 生成结果行:前两列(NAME、COMPARNY)留空,其余列做对比 result_row = ['', ''] for col_index in range(2, len(header)): # 获取当前列的所有值 column_values = [row[col_index] for row in data_rows] # 判断所有值是否完全一致 if all(value == column_values[0] for value in column_values): result_row.append("TRUE") else: result_row.append("FALSE") # 定义格式化函数,保持和原CSV一致的|分隔样式 def format_row(row): return ' | '.join(f' {val} ' for val in row) + '|' # 输出原内容 + 结果行 for row in processed_rows: print(format_row(row)) print(format_row(result_row))
示例效果
输入CSV内容
NAME |COMPARNY | DT1| DT2| MR.X |ABC | 48737953.20| 11219420.39| MR.N |XYZ | 48737953.20| 11219421.39| MR.B |LMN | 48737953.20| 11219420.39|
输出结果
NAME | COMPARNY | DT1 | DT2 | MR.X | ABC | 48737953.20 | 11219420.39 | MR.N | XYZ | 48737953.20 | 11219421.39 | MR.B | LMN | 48737953.20 | 11219420.39 | | | TRUE | FALSE |
自定义调整
- 如果需要对比所有列(包括
NAME和COMPARNY),只需要修改两处:- 将
result_row = ['', '']改为result_row = [] - 将循环的
range(2, len(header))改为range(len(header))
- 将
- 如果你的CSV分隔符不是
|,可以修改split('|')里的分隔符。
内容的提问来源于stack exchange,提问作者naga2hands
相关产品推荐
相关产品推荐

