0

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

我有两个包含 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 之间存在差异,则表明这一点。

4

2 回答 2

3

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

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

于 2012-09-20T21:33:44.083 回答
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
于 2012-09-20T22:23:14.980 回答