【问题标题】:Compare two files and remove the common lines比较两个文件并删除公共行
【发布时间】:2020-11-28 15:38:30
【问题描述】:

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


    【解决方案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)
    

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

    【讨论】:

      【解决方案2】:

      您可以使用设置操作,只需几行代码即可完成此操作。

      读取两个文件并将行列表转换为集合并使用集合操作

      line_file1 = set(line_file1)
      line_file2 = set(line_file2)
      result = line_file1 - line_file2
      

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

      注意:file1中的重复数据也会被删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 1970-01-01
        • 2018-12-18
        • 1970-01-01
        相关资源
        最近更新 更多