首页 > 解决方案 > 比较两个文件并删除公共行

问题描述

我有两个文件。File1 有数据

DF2SVT-(.CD(),.CP(clk),.D(),.SDN(),.Q(na));

OAI3DSVT-(.A1(na),.A2(),.A3(),.B(),.ZN(y));

GLHSVT-(.D(v),.E(),.Q(y));

DCCDSVT-(.I(w),.ZN(y));

和带有数据的file2

GLHSVT-(.D(v),.E(),.Q(y));

如果 file2 中的行存在于 file1 中,则从 file1 中删除该行并打印 file1 的其余行。所以我想要输出文件 fout 作为

DF2SVT-(.CD(),.CP(clk),.D(),.SDN(),.Q(na));

OAI3DSVT-(.A1(na),.A2(),.A3(),.B(),.ZN(y));

DCCDSVT-(.I(w),.ZN(y));

我知道如何使用打印两个文件之间的公共行

for line in file1 & file2:
    if line:
       print line

但是如果匹配存在,我不知道如何从文件中删除该公共行。

标签: python

解决方案


将两个文件的行读入单独的变量中。遍历第一个文件的行,并为每个文件检查它们是否存在于第二个文件中,如果不存在则将它们保存到第一个文件中。

with open(file1, "r") as file1:
     lines_file1 = file1.readlines()
with open(file, "r") as file2:
     lines_file2 = file2.readlines()
     with open(file1, "w") as f_w:
           for line in lines_file1:
               if line not in lines_file2
                  f_w.write(line)

这种方法的缺点是您将整个文件加载到内存中。


推荐阅读