0

xlrd を使用して 2 つの .xls シートの値を比較するスクリプトがあります。デフォルトでは、類似点を探すことができ、それらを txt ファイルに書き込みます。引数に を渡すと、各 .xls に固有のデバイスを探して、それらを txt ファイルに書き込むことができます。現在、各 .xls の行を反復処理し、2 つのファイル間に類似性が見つかったときにフラグを True としてマークします。フラグが False とマークされている場合、最初のシートからのみホストが書き込まれます。フラグ付きのコードは次のとおりです。

else:
    for row1 in range(sheet1.nrows):
        inboth = False
        for row2 in range(sheet2.nrows):
            if sheet2.row_values(row2)[0].split(".")[0] == sheet1.row_values(row1)[0].split(".")[0]:
                inboth = True
        if not inboth:
            outfile.write(sheet1.row_values(row1)[0].split(".")[0] + ",File1\n")
    for row2 in range(sheet2.nrows):
        inboth = False
        for row1 in range(sheet1.nrows):
            if sheet1.row_values(row1)[0].split(".")[0] == sheet2.row_values(row2)[0].split(".")[0]:
                inboth = True
        if not inboth:
            outfile.write(sheet2.row_values(row2)[0].split(".")[0] + ",File2\n")

「inboth」フラグを使用せずにこれを行うより効率的な方法はありますか? 両方のシートを 2 回繰り返す必要がない解決策はありますか?

4

1 に答える 1

4

必要なのは Pythonsetデータ型です。http://docs.python.org/library/sets.html最初のファイルを反復処理し、見つかったすべてのデバイスを setsに入れてから、2 番目のファイルのすべてのデバイスを set に入れますt。次に、次のようにします。

r = s.symmetric_difference(t)

rデバイスのリストは、両方ではなく一方のファイルに含まれます。

于 2012-10-24T19:25:25.510 に答える