我不是开发人员,为了方便我的工作做一些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
请指导我如何实现这一目标,非常感谢
答案 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
这不是您期望的结果,但是从这里开始,我希望您能找到解决方案。