0

2 つの csv ファイルの列を比較しようとしています。

file1.csv:

aaa,1
abc,2
bcd,2
adc,3

file2.csv:

aaa,1
abc,0
bcd,2
adc,4

「Not Equ」という結果が得られると予想していました。

最初の列が同じで、2 番目の列が異なる場合。

以下のコードを試しましたが、成功しませんでした:

import csv
file1 = 'C:/Users/Desktop/file1.csv'
file2 = 'C:/Users/Desktop/file2.csv'

reader1 = csv.reader(open(file1))
reader2 = csv.reader(open(file2))

for row1 in reader1:
    text1 = row1[0].split(',')
    test1sentence = text1[0]
    test1class = text1[1]

    for row2 in reader2:
        text2 = row2[0].split(',')
        test2sentence = text2[0]
        test2class = text2[1]

        if test1sentence == test2sentence:
            if test1class != test2class:
                print "Not Equ"

なにか提案を?

4

3 に答える 3

2

基本的に、キーを値に一致させる辞書(またはマップ)と比較しています。

これを行う正しい方法は、キーセットを比較することです。等しい場合は、キーごとに両方のファイルの値を比較します。

#!/usr/bin/python

def file_to_dict(filename):
    lines  =  open(filename).read().split()
    return dict([line.split(',') for line in lines])

dict1, dict2 = file_to_dict('file1.csv'), file_to_dict('file2.csv')

print "Keys are equal? ", set(dict1.keys())==set(dict2.keys())
print "Values are equal? ", all([dict1[key]==dict2[key] for key in dict1])
于 2013-02-21T10:27:56.387 に答える
1

ファイルを2つの辞書に読み込んで、次のように比較できます。

dict1 = dict(row for row in reader1 if len(row) == 2)
dict2 = dict(row for row in reader2 if len(row) == 2)

if sorted(dict1.keys()) == sorted(dict2.keys()):
    if dict1 != dict2:
        print "Not Equ"

dict(reader1)最初の列をdictのキーに変換し、2番目の列を値に変換します。

ジェネレータ式(row for row in reader1 if len(row) == 2)は、正確に2つの列を持たない行を除外します。

キーを比較するには、キーを並べ替える必要があります。dict全体(dict1 != dict2)を比較すると、ソートされたキーと値のペアが比較されます。最初にキーを比較したので、dict全体の違いは値によるものであることがわかります。


編集:列全体ではなく、個々のアイテムを比較するには:

dict1 = dict(row for row in reader1 if len(row) == 2)
dict2 = dict(row for row in reader2 if len(row) == 2)

for key, val in dict1.iteritems():
    try:
        if dict2[key] != val:
            print "Not Equ"
    except KeyError:
        pass
于 2013-02-21T10:34:10.650 に答える
0

次のように、辞書に解析して比較できます。

>>> d1={'aaa':1, 'abc':2, 'bcd':2, 'adc':3}
>>> d2={'aaa':1, 'abc':0, 'bcd':2, 'adc':4}
>>> d1==d2
False
>>> d2={'aaa':1, 'abc':2, 'bcd':2, 'adc':3}
>>> d1==d2
True
于 2013-02-21T10:51:30.347 に答える