比较两个文件并删除相同的行

3

我有两个文件。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

但是我不知道如何在匹配的情况下从文件中删除该公共行。

2个回答

1

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

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)

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

0
你可以使用几行代码中的集合操作来完成这个任务。
读取两个文件并将行列表转换为集合,然后使用集合操作。
line_file1 = set(line_file1)
line_file2 = set(line_file2)
result = line_file1 - line_file2

现在将结果集中的每个元素(行)写入文件。

注意:文件1中的重复数据也将被删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接