web-dev-qa-db-fra.com

Comparer 2 fichiers Excel à l'aide de Python

J'ai deux fichiers xlsx comme suit:

value1   value2   value3
0.456   3.456    0.4325436
6.24654 0.235435 6.376546
4.26545 4.264543 7.2564523

et 

value1   value2  value3
0.456   3.456    0.4325436
6.24654 0.23546  6.376546
4.26545 4.264543 7.2564523

J'ai besoin de comparer toutes les cellules, et si une cellule de file1 != est une cellule de file2print ça.

import xlrd
rb = xlrd.open_workbook('file1.xlsx')
rb1 = xlrd.open_workbook('file2.xlsx')
sheet = rb.sheet_by_index(0)
for rownum in range(sheet.nrows):
    row = sheet.row_values(rownum)
    for c_el in row:
        print c_el

Comment ajouter la cellule de comparaison de file1 et file2?

4
user6241246

L'approche suivante devrait vous aider à démarrer:

from itertools import izip_longest
import xlrd

rb1 = xlrd.open_workbook('file1.xlsx')
rb2 = xlrd.open_workbook('file2.xlsx')

sheet1 = rb1.sheet_by_index(0)
sheet2 = rb2.sheet_by_index(0)

for rownum in range(max(sheet1.nrows, sheet2.nrows)):
    if rownum < sheet1.nrows:
        row_rb1 = sheet1.row_values(rownum)
        row_rb2 = sheet2.row_values(rownum)

        for colnum, (c1, c2) in enumerate(izip_longest(row_rb1, row_rb2)):
            if c1 != c2:
                print "Row {} Col {} - {} != {}".format(rownum+1, colnum+1, c1, c2)
    else:
        print "Row {} missing".format(rownum+1)

Cela affichera toutes les cellules différentes entre les deux fichiers. Pour vos deux fichiers donnés, ceci affichera:

Row 3 Col 2 - 0.235435 != 0.23546
5
Martin Evans

Utilisez pandas et vous pouvez le faire aussi simple que cela:

import pandas as pd

df1 = pd.read_Excel('Excel1.xlsx')
df2 = pd.read_Excel('Excel2.xlsx')

difference = df1[df1!=df2]
print difference

Et le résultat ressemblera à ceci:

 enter image description here

14
Abbas

J'utilise un code pour faire quelque chose de similaire. Feuille de saisie Excel et image de la trame de données de sortie attendue

import pandas as pd
import numpy as np
from xlsxwriter.utility import xl_rowcol_to_cell

template = pd.read_Excel("template.xlsx",na_values=np.nan,header=None)
testSheet = pd.read_Excel("test.xlsx",na_values=np.nan,header=None)

rt,ct = template.shape
rtest,ctest = testSheet.shape

df = pd.DataFrame(columns=['Cell_Location','BaseTemplate_Value','CurrentFile_Value'])

for rowNo in range(max(rt,rtest)):
  for colNo in range(max(ct,ctest)):
    # Fetching the template value at a cell
    try:
        template_val = template.iloc[rowNo,colNo]
    except:
        template_val = np.nan

    # Fetching the testsheet value at a cell
    try:
        testSheet_val = testSheet.iloc[rowNo,colNo]
    except:
        testSheet_val = np.nan

    # Comparing the values
    if (str(template_val)!=str(testSheet_val)):
        cell = xl_rowcol_to_cell(rowNo, colNo)
        dfTemp = pd.DataFrame([[cell,template_val,testSheet_val]],
                              columns=['Cell_Location','BaseTemplate_Value','CurrentFile_Value'])
        df = df.append(dfTemp)

df est le dataframe requis

1
sharinganSawant