【Python】2つのExcelファイルを比較したい【雑記】

スポンサーリンク
雑記
スポンサーリンク

Pythonコード

以下のコードを「DiffExcel.py」として保存。

from asyncio.windows_events import NULL
import sys
from numpy import diff
import pandas as pd
import csv

#メイン関数
def main():
    #引数の確認
    args = sys.argv
    if(len(args) < 4):
        print("引数:期待値のパス,対象のパス,比較結果の保存先")
        return False

    #保存パスの取得
    path_expect = args[1]
    path_result = args[2]
    path_diff = args[3]

    #エクセルファイルの差分抽出
    diff_excel = DiffExcel(path_expect, path_result, path_diff)

    if diff_excel:
        print("一致")
    else:
        print("不一致")

    return True

#エクセルファイルの差分抽出
#期待値のパス,対象のパス,比較結果の保存先
def DiffExcel(path_expect, path_result, path_diff):
    #結果
    diff_result = True
    diff_list = list()

    #excelシートの読み込み
    excel_expect = pd.read_excel(path_expect, sheet_name=None, header=None, index_col=None)
    excel_result = pd.read_excel(path_result, sheet_name=None, header=None, index_col=None)

    #worksheetsの名前比較
    if excel_expect.keys() != excel_result.keys():
        OutputCsv(path_diff, "Key_False")
        return False

    #excelシートの比較
    for key in excel_expect:
        excel_expect[key] = excel_expect[key].fillna(0)
        excel_result[key] = excel_result[key].fillna(0)

        #データサイズの比較
        if excel_expect[key].shape != excel_result[key].shape:
            OutputCsv(path_diff, "Shape_False")
            return False

        #不一致箇所の探索
        compare_result = excel_expect[key] != excel_result[key]
        row, col = compare_result.shape
        for i in range(row):
            for j in range(col):
                if compare_result.iat[i, j] == True:
                    diff_result = False
                    diff_list.append([key, i, j, excel_expect[key].iat[i,j], excel_result[key].iat[i,j]])

    #出力用CSVファイル作成
    OutputCsv(path_diff, diff_result, diff_list)
    
    return diff_result

#出力用CSVファイル作成
def OutputCsv(path_diff, diff_result, diff_list = NULL):
    #書き込み設定でファイルオープン
    csv_diff = open(path_diff, 'w')
    csv_diff_writer = csv.writer(csv_diff, lineterminator="\n")

    #結果の書き込み
    csv_diff_writer.writerow(["worksheet", "row", "col", "expect", "result", diff_result])
    if diff_list != NULL:
        csv_diff_writer.writerows(diff_list)
    
    csv_diff.close()

if __name__ == "__main__":
    main()

動作確認

次のような期待値ファイルと比較対象ファイルを用意。

次のコマンドを入力する。

python .\DiffExcel.py 期待値ファイルのパス 比較対象ファイルのパス 比較結果ファイルのパス
python .\DiffExcel.py ~\sample1.xlsx ~\sample2.xlsx ~\result.csv

実行結果は次の通り。

不一致
比較結果ファイル

最後に

2つのExcelファイルが一致しているかそうでないかを判別する必要があり、人力でやるにはめんどくさいのでpythonで適当に作ってみました。

参考程度になれば。

コメント

タイトルとURLをコピーしました