Python - 列出比较和决定

时间:2018-06-11 22:50:25

标签: python

我不是开发人员,为了方便我的工作做一些python编码。我正在研究的新项目是有两个excel文件,比较它们并生成更改。对于文件,我们将其称为旧文件新文件。两个文件都有固定列,但行可能会有所不同。在这两个文件中,大多数数据在同一行和列中是相同的,但某些数据可能会有所不同。说每个文件的两个样本列是

Old File                                New File

id    item                              id     item
-------------------                     -----------------------------
1     apple, banana                     1      banana, grape
2     grape                             2      apple
3     orange

我已使用嵌套列表读取文件。例如旧文件数据就像

old_file_list = [ ['1','apple,banana'], ['2','grape'], ['3','orange'] ]
new_file_list = [ ['1','banana,grape'], ['2','apple'] ]

需要根据上面的数据生成以下输出,

print output

item      old_file_id    new_file_id    status
----------------------------------------------
apple     1                2           changed
orange    3                -           deleted
grape     2                1           changed

请指导我如何实现这一目标,非常感谢

1 个答案:

答案 0 :(得分:0)

免责声明:由于您说您不是开发人员,因此我将提供一种非常简单易懂的方法来查找您的解决方案。它可能不是最有效的方法。这不是解决方案。但是有助于找到解决方案的指南。

这是iterate through nested lists.

的经典问题

有很多信息缺失,可能会使此解决方案无效,但这只是一个指导。

对于 old_file 列表中的每个项目,您需要检查此项目是否与 new_file 列表完全相同,并打印未更改的项目。

for item in old_file_list:
    if item in new_file_list:
        print 'Item %r unchanged' % item

下一步是检查 old_file 列表的子项是否在 new_list 的任何子列表中。我将假设子列表只有2个项目。

    else:
        for new_item in new_file_list:
            if item[1] in new_item:
                print("Item %r changed" % item[1])

如果 old_lis 子项目中没有 new_list 子项目,我们可能会认为它已被删除。

            else:
                print("Item %r deleted" % item[1])

然而,该项目可能有不同的顺序,但我不会处理这种情况。

此代码的示例,您的数据是

>>> old_file_list = [ ['1','apple,banana'], ['2','grape'], ['3','orange'] ]
>>> new_file_list = [ ['1','banana,grape'], ['2','apple'] ]
>>>
>>> for item in old_file_list:
...     if item in new_file_list:
...         print('Item %r unchanged' % item)
...     else:
...         for new_item in new_file_list:
...             if item[1] in new_item:
...                 print("Item %r changed" % item[1])
...             else:
...                 print("Item %r deleted" % item[1])
...
Item 'apple,banana' deleted
Item 'apple,banana' deleted
Item 'grape' deleted
Item 'grape' deleted
Item 'orange' deleted
Item 'orange' deleted

这不是您期望的结果,但是从这里开始,我希望您能找到解决方案。