在两个列表之间进行差异后,显示了公共线。但我的要求是,当我比较两个列表时,不应显示公共线(进入差异)。你能想一想如何抑制它。
difflist.py
-----------
import difflib
def main():
rawfromlines = open('file1.sql', 'r').readlines()
tolines = open('file2.sql', 'r').readlines()
list_f1 = []
list_f2 = []
for f1 in rawfromlines:
for part in f1.replace('\n','').split(','):
list_f1.append(part)
for f2 in tolines:
for part in f2.replace('\n','').split(','):
list_f2.append(part)
targetfile = open('diff_of_files.sql', 'w')
differ = difflib.Differ()
diffs = list(differ.compare(list_f1, list_f2))
for i in range(0,len(diffs)):
print diffs[i]
file1.sql
----------
CREATE TABLE SALARY
(
SALARY int
);
CREATE TABLE JOB1
(
EMP1 int
);
file2.sql
---------
CREATE TABLE SALARY
(
EMPNAME VARCHAR2(255)
SALARY int
);
CREATE TABLE JOB1
(
EMP1 int
);
Actual Output
---------------
CREATE TABLE SALARY
(
+ EMPNAME VARCHAR2(255)
SALARY int
);
CREATE TABLE JOB1
(
EMP1 int
);
Expected Output
---------------
CREATE TABLE SALARY
(
+ EMPNAME VARCHAR2(255)
SALARY int
);
公共线不存在。
答案 0 :(得分:1)
不幸的是,Differ
没有任何功能来打印HtmlDiff
之类的上下文。但是,通过保留上下文行的缓冲区,您可以轻松地自己构建类似的东西。像这样:
def print_with_context (diff, context = 3):
buf = []
print_more = 0
for line in diff:
if line.startswith('-') or line.startswith('+'):
if len(buf) > context:
print('...')
print('\n'.join(buf[-context:]))
buf = []
print_more = context
print(line)
elif print_more:
print(line)
print_more -= 1
if print_more == 0:
print('...')
else:
buf.append(line)
像这样使用:
print_with_context(differ.compare(list_f1, list_f2), 2)