Python比较差异 - 第2部分

时间:2012-09-20 21:30:31

标签: python

之前我曾经问过类似的问题,但我会再试一次,因为我还有一些问题。

我有两个有3列的csv文件。

名称产品金额:

我想获得两个文件之间的差异。如果两个文件的名称和产品顺序相同,我可以这样做。这将给出我正在寻找的金额差异。

我需要有一些东西可以列出并比较两者,如果不是以相同的顺序显示差异。

我试过了:

import csv
import difflib 


file1 = open('file1','rb').read().splitlines()
file2 = open('file1','rb').read().splitlines()

for diff in difflib.ndiff(file1, file2):
    print(diff)

但是如果有任何事情发生故障就没有好处。有没有办法我可以将每个“名称产品数量”分组,并与文件2进行比较,其中我将每个“名称产品数量”分组,如果文件1和文件2之间存在差异则显示。

2 个答案:

答案 0 :(得分:3)

您可以使用python内置函数sorted(alist)对行进行排序,或使用alist.sort()对其进行排序。

此外,您可以在文件中使用UNIX命令sort,然后在python中打开它们。这样你就可以确定它们都是有序的。

答案 1 :(得分:0)

您确定首先需要difflib吗?

首先,你只需要最小的差异线,而不是任何上下文等,所以花哨的差异算法有点过分。

大概你要解析生成的差异线,这样你就可以总结出金额。 (据推测这就是你导入csv的原因。)

因此,如果您要这样做,您可以导入值,然后,例如,设置差异。或者只是即时差异,这样的事情(未经测试,只是为了表明这个想法):

import csv

with open('file1', 'rb') as f:
  d = {(name, product): amount for name, product, amount in csv.reader(f)}
diff2 = 0.0
with open('file2', 'rb') as f:
  for name, product, amount in csv.reader(f):
  if d.get((name, product)) == amount:
    del d[(name, product)]
  else:
    diff2 += float(amount)
diff1 = sum(float(amount) for amount in d.itervalues())
print diff1 - diff2