Python处理csv:从nm.csv剔除xc.csv已存在值脚本运行错误排查
问题排查与修复
可能的错误原因
- 路径不匹配问题:你读取
nm.csv用的是桌面的绝对路径,但是写入的时候用的是相对路径nm.csv,如果脚本运行时的工作目录不是桌面,新生成的结果文件会保存在脚本运行目录下,不会覆盖桌面的原文件,你大概率是打开了旧的桌面文件才得到不符合预期的结果。 - 原文件已被污染:如果之前写反过集合顺序,或者错误覆盖过源
nm.csv,现在你读取的nm.csv本身内容已经不是最初的A集合,自然运算结果错误。 - 行内容存在隐藏字符:两个文件里的相同行可能存在首尾空格、换行符差异、编码差异等,导致集合判断时认为是不同值。
修复后的代码
# 统一用绝对路径,避免读写文件位置不匹配 nm_path = '/Users/robinmalhotra/Desktop/nm.csv' xc_path = '/Users/robinmalhotra/Desktop/xc.csv' output_path = '/Users/robinmalhotra/Desktop/result.csv' # 建议不要直接覆盖源文件,先输出到新文件验证 with open(nm_path, 'r', encoding='utf-8') as f: # 去掉每行首尾空白符再存,避免隐藏字符干扰,同时跳过空行 set_a = {line.strip() for line in f if line.strip()} with open(xc_path, 'r', encoding='utf-8') as f: set_b = {line.strip() for line in f if line.strip()} # 计算A-B差集 result = set_a - set_b # 输出到新文件,避免损坏源文件 with open(output_path, 'w', encoding='utf-8') as f: f.write('\n'.join(result))
额外注意事项
- 如果你的CSV存在多列,需要确认是按整行匹配还是按指定列匹配,如果是按指定列匹配,需要先解析CSV取对应列的值做差集,再回写整行数据,目前你原有的代码是按整行做匹配的。
- 不要直接覆盖源文件,先输出到单独的result.csv验证内容正确后,再替换原文件,避免源文件丢失。
内容的提问来源于stack exchange,提问作者Jhonnysins
相关产品推荐
相关产品推荐

