通过比较字段得出的Python打印不匹配值

时间:2018-08-03 13:35:57

标签: python python-3.x unix awk grep

我对此感到困惑。我的要求是,我需要比较两个不对称的文本文件,并打印不匹配的原因,即值在哪一行/字段不同。

这是两个文件,它们具有相应的值

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脚本,那将非常好。 谢谢

0 个答案:

没有答案