如何避免在python中使用diffLib在输出文件中使用公共行

如何避免在python中使用diffLib在输出文件中使用公共行,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我是python编码的新手,遇到了一个问题。 当我比较两个.sql文件时,输出文件中会显示公共行,要求只捕获修改过的表。 两个文件中的公用行不应显示在文件(diff_of_files.sql)中。逻辑应为通用逻辑,不适用于以下程序。如果有庞大的数据库,则不应显示公共表名 Python脚本 file2.sql diff_of_files.sql 预期产量 如果你愿意 仅捕获已修改的表的步骤 您可能需要首先运行一个different。在这样的表元素列表上比较 import difflib impor

我是python编码的新手,遇到了一个问题。 当我比较两个.sql文件时,输出文件中会显示公共行,要求只捕获修改过的表。 两个文件中的公用行不应显示在文件(diff_of_files.sql)中。逻辑应为通用逻辑,不适用于以下程序。如果有庞大的数据库,则不应显示公共表名

Python脚本 file2.sql diff_of_files.sql 预期产量 如果你愿意

仅捕获已修改的表的步骤

您可能需要首先运行一个
different。在这样的表元素列表上比较

import difflib
import re

s1 = open("file1.sql", "r", encoding="utf-8").read()
s2 = open("file2.sql", "r", encoding="utf-8").read()
list_f1 = re.split('\);\n', s1)[:-1]
list_f2 = re.split('\);\n', s2)[:-1]
differ = difflib.Differ()
diffs = list(differ.compare(list_f1, list_f2))

list_diff = [d for d in diffs if d.startswith('+ CREATE TABLE')]
这将返回:

+ CREATE TABLE SALARY
(
 SALARY short int
 EMPNAME VARCHAR2(255)
 ID int

+ CREATE TABLE BRIDGE
(
 ID int

然后运行另一个
different。比较
list_f1
list_f2
匹配
list_diff

的表元素,有人能帮我解决上述问题吗
CREATE TABLE SALARY
(
 SALARY short int
 EMPNAME VARCHAR2(255)
 ID int
);
CREATE TABLE JOB1
(
 EMP1 int
);
CREATE TABLE EMP
(
 EMP VARCHAR2
 ID  INT
);
CREATE TABLE BRIDGE
(
 ID int
);
CREATE TABLE SALARY
  (
!  SALARY short int-->   SALARY int
+   EMPNAME VARCHAR2(255)
   ID int
  );
CREATE TABLE JOB1
  (
   EMP1 int
  );
CREATE TABLE EMP
  (
   EMP VARCHAR2
   ID  INT
  );
+  CREATE TABLE BRIDGE
+  (
+   ID int
+  );
CREATE TABLE SALARY
      (
    !  SALARY short int-->   SALARY int
    +   EMPNAME VARCHAR2(255)
       ID int
      );
    +  CREATE TABLE BRIDGE
    +  (
    +   ID int
    +  );
import difflib
import re

s1 = open("file1.sql", "r", encoding="utf-8").read()
s2 = open("file2.sql", "r", encoding="utf-8").read()
list_f1 = re.split('\);\n', s1)[:-1]
list_f2 = re.split('\);\n', s2)[:-1]
differ = difflib.Differ()
diffs = list(differ.compare(list_f1, list_f2))

list_diff = [d for d in diffs if d.startswith('+ CREATE TABLE')]
+ CREATE TABLE SALARY
(
 SALARY short int
 EMPNAME VARCHAR2(255)
 ID int

+ CREATE TABLE BRIDGE
(
 ID int