之前我曾经问过类似的问题,但我会再试一次,因为我还有一些问题。
我有两个有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之间存在差异则显示。
答案 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