Python 比较两个文件并删除公用行
我有两个文件。带有数据的文件1Python 比较两个文件并删除公用行,python,Python,我有两个文件。带有数据的文件1 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)); GLHSVT-(.D(v),.E(),.Q(y)); 和带有数据的文件2 DF2SVT-(.CD(),.CP(clk),.D(),.SDN(),.Q(na)); OAI3DSV
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));
GLHSVT-(.D(v),.E(),.Q(y));
和带有数据的文件2
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));
GLHSVT-(.D(v),.E(),.Q(y));
如果文件2中的行出现在文件1中,则从文件1中删除该行并打印文件1的其余行。
所以我希望输出文件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
但如果存在匹配项,我不知道如何从文件中删除该公共行。将两个文件的行读入一个单独的变量中。对第一个文件的行进行迭代,并针对每一行检查它们是否存在于第二个文件中,如果不存在,则将它们保存到第一个文件中
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)
这种方法的缺点是您正在将整个文件加载到内存中。您可以使用设置操作来完成此操作,只需几行代码 读取两个文件,将行列表转换为集合并使用集合操作
line_file1 = set(line_file1)
line_file2 = set(line_file2)
result = line_file1 - line_file2
现在写入结果将每个元素(行)设置到文件中
注意:文件1中的重复数据也将被删除