0

以前にも似たような質問をしたことがありますが、他にも質問があるので再度質問させていただきます。

3 つの列を持つ 2 つの csv ファイルがあります。

商品名 金額:

2つのファイルの違いを取得したい。2 つのファイルの名前と製品の順序が同じであれば、これを行うことができます。これにより、私が探している量の違いが得られます。

2つをリストして比較し、同じ順序でない場合は違いを示すために必要なものが必要です。

私が試してみました:

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。)

したがって、それを行う場合は、値をインポートしてから、たとえば設定差を実行できます。または、次のようにその場で diff を実行します (未テスト、アイデアを示すためだけに):

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 に答える