如何使用“;difflib”;在Linux中使用python的命令?
我有两个SQL文件,一个是old.SQL,另一个是new.SQL 假设old.sql包含一个表,其中包含三个字段:Emp_Id、名称和地址以及存储在old.sql中的数据,如下所示:如何使用“;difflib”;在Linux中使用python的命令?,python,linux,Python,Linux,我有两个SQL文件,一个是old.SQL,另一个是new.SQL 假设old.sql包含一个表,其中包含三个字段:Emp_Id、名称和地址以及存储在old.sql中的数据,如下所示: Insert into table1 values (101 ,"a", "xyz"); Insert into table1 values (102 ,"b", "pqr"); Insert into table1 values (101 ,"a", "xyz123"); Insert into table1
Insert into table1 values (101 ,"a", "xyz");
Insert into table1 values (102 ,"b", "pqr");
Insert into table1 values (101 ,"a", "xyz123");
Insert into table1 values (102 ,"b", "pqr");
然后,我将“a”地址“xyz”更改为“xyz123”,并将该数据保存在新的.sql文件中。现在,新的.sql文件包含如下数据:
Insert into table1 values (101 ,"a", "xyz");
Insert into table1 values (102 ,"b", "pqr");
Insert into table1 values (101 ,"a", "xyz123");
Insert into table1 values (102 ,"b", "pqr");
当我像这样使用difflib命令时:
difflib old.sql new.sql
它给出了行之间的差异,但我只需要更新的数据,比如
xyz123
问题是diff
不知道行的哪一部分定义为“数据”,哪一部分定义为“语法”。如果你做了一个行差异,你会得到不同的部分
Insert into table1 values (101 ,"a", "xyz");
Insert into table1 values (101 ,"a", "xyz123");
123"); <-- difference
检查详细差异将取决于文件的语法
def check_difference(line1, line2):
if line1 == line2:
return None
# Get a list with the cleaned up data fields.
data1 = get_values_list(line1)
data2 = get_values_list(line2)
# Compare each individual field.
for i in range(len(data1)):
if data1[i] != data2[i]:
print('Difference: {} --> {}'.format(data1[i], data2[i]))
def get_values_list(s):
# Split a line into data fields and remove quotes, etc.
li = s[s.index('(') + 1 : s.index(')')].split(',')
return [x.strip(' ').strip('"\'') for x in li]
这是未经测试的,但基本上可以进行比较。它不会读取整个文件,只返回更改的单个数据字段。但我需要表名、列名和已更改的数据。请告诉我python中是否有可用的逐字比较行的命令。