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

获取两个CSV文件新增行时Python脚本输出异常,求排查

解决CSV文件对比时无法正确识别重复行的问题

看起来你遇到的问题是行尾换行符不一致导致的匹配失败,我来帮你分析下并解决这个问题:

问题原因

当你用set(t1)直接读取文件内容时,每一行的字符串会包含行尾的换行符(\n,Windows系统可能是\r\n)。如果你的A.csv文件里的唯一一行末尾没有换行符,而B.csv里的第一行末尾带有换行符,那么这两行在集合中会被判定为不同的元素——因为一个带换行符,一个不带。这就导致脚本错误地认为B.csv的第一行是新增行,从而把它也写入了输出文件。

解决方案

我们可以在读取行的时候统一去掉行尾的换行符,再进行对比,这样就能确保内容相同的行被正确识别为重复项。修改后的脚本如下:

input_file1 = "A.csv"
input_file2 = "B.csv"
output_path = "out.csv"

# 读取A.csv,去掉每行的换行符后存入集合
with open(input_file1, 'r') as t1:
    fileone = set(line.rstrip('\n') for line in t1)

with open(input_file2, 'r') as t2, open(output_path, 'w') as outFile:
    for line in t2:
        # 去掉当前行的换行符,判断是否在A的行集合中
        stripped_line = line.rstrip('\n')
        if stripped_line not in fileone:
            # 保留原行的格式写入(包含原换行符)
            outFile.write(line)

额外说明

  • rstrip('\n')只会去掉行尾的换行符,不会影响行内的空格或其他内容,比strip()更安全(strip()会同时去掉行首尾的所有空白字符,可能破坏行内容)。
  • 如果你的文件使用Windows风格的换行符(\r\n),可以把rstrip('\n')换成rstrip('\r\n'),或者直接用rstrip(os.linesep)(需要先导入os模块)来适配不同系统的换行格式。

运行修改后的脚本,就能得到你预期的输出:只保留B.csv中真正新增的那一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:06