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