gpt4 book ai didi

python - 如何在Python中显示没有公共(public)行的列表差异?

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:06 24 4
gpt4 key购买 nike

在两个列表之间进行比较后,将显示公共(public)行。但我的要求是,当我比较两个列表时,不应显示公共(public)行(位于差异中)。你能给出一些如何抑制它的想法吗?

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
);

公共(public)线不存在。

最佳答案

不幸的是,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)

关于python - 如何在Python中显示没有公共(public)行的列表差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35413947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com