我对此感到困惑。我的要求是,我需要比较两个不对称的文本文件,并打印不匹配的原因,即值在哪一行/字段不同。
这是两个文件,它们具有相应的值
Dataset_1
12345 kousik mallick 10 ind
12221 john thomas 11 usa
11111 mike hussy 12 usa
11111 mike hussy 12 us
11111 mike hussy 15 usj
11111 mike hussy 12 aus
Dataset_2
12345 kousik mallick 10 ind
12221 john thomas 11 usa
11111 mike hussy 12 usa
11111 mike hussy 12 aus
预期输出如下:
Fifth field Mismatch:
DataSet_2-['11111' mike hussy 12 usa','11111' mike hussy 12 aus] | DataSet_1-['11111 mike hussy 12 us]
fourth and fifth Field Mismatch: Data Set 2- ['11111 mike hussy 12 usa','11111 mike hussy 12 aus'] | Data Set 1- [11111 mike hussy 15 usj]
我了解到,必须逐行进行比较,例如,如果row-5
处存在不匹配,则找到不匹配报告。
我想出了这个脚本,但是我无法弄清楚如何将这些元素之间的匹配组合在一起。
我使用difflib function
编写了以下脚本。
#Python program to compare two data sets
import difflib
import sys
import os
file_dir='/home/data_engineering_project/'
print(os.path.isdir(file_dir))
dataset_1,dataset_2=[],[]
file_1 = 'dataset1'
file_2= 'dataset2'
if os.path.exists(file_1):
if os.path.exists(file_2):
print(file_1,file_2)
file1=file_dir + file_1
file2=file_dir + file_2
with open(file1) as file1, open(file2) as file2:
line_formatter = '{:3d} {}'.format
file1_lines = [line_formatter(i, line) for i, line in enumerate(file1, 1)]
file2_lines = [line_formatter(i, line) for i, line in enumerate(file2, 1)]
results = difflib.Differ().compare(file1_lines, file2_lines)
sys.stdout.writelines(results)
这将产生以下输出:
dataset1 dataset2
1 12345 kousik mallick 10 ind
2 12221 john thomas 11 usa
3 11111 mike hussy 12 usa
- 4 11111 mike hussy 12 us
+ 4 11111 mike hussy 12 aus
? +
- 5 11111 mike hussy 15 usj
- 6 11111 mike hussy 12 aus
我无法通过字段比较来弄清楚如何进行该字段,以及如何找到多个字段的不匹配项。
**更新:**我已经编写了以下代码,其中检查了第一个ID,并尝试根据ID比较列表,到目前为止,这引发了错误,但是我的猜测是,逻辑必须与此相似。
>>> for i in range(len(dataset_1)):
... for j in range(len(dataset_2)):
... if dataset_1[i][0]==dataset_2[j][0]:
... if dataset_1[0:]!=dataset_2[0:]:
... print(dataset_2[i])
**** UPDATE2 ****我找到了awk方法,并尝试了该方法,但这似乎不起作用。如果有人可以将我指向可以完成这项工作的awk脚本,那将非常好。 谢谢