-1

月次レポートを実行する前に、2つのExcelファイルのデータを比較しようとしているときに提案を探しています。これをPythonで実行したいと思います。

2つの.xlsファイルは同一である必要があります(1つは当月のデータで、もう1つは先月のデータです)が、レコードが追加または欠落している可能性があります(行として)。比較しようとしている情報を含む「ID」列があります。

相違点(行の追加または欠落)がある場合は、不一致を報告したいと思います。

理想的には、このレポートは.txtまたは3番目の.xlsファイルとしてエクスポートされます。

コードスニペットやサンプルをいただければ幸いです。

以下は、.txtで同様のことを行うための私のコードですが、最初の不一致に達するとすぐに、どのレコードが問題の原因であるかを確認できません。

f1 = open("AuditData.txt", "r")
f2 = open("AuditData2.txt", "r")

fileOne = f1.readlines()
fileTwo = f2.readlines()

f1.close()
f2.close()

outFile = open("AuditData3.txt", "w")
x = 0
for i in fileOne:
    if i != fileTwo[x]:
        outFile.write(i+" <> "+fileTwo[x])
    x += 1
outFile.close()
4

4 に答える 4

4

パンダライブラリを見てみます。たとえば、2つの類似したファイルから開始する場合:

>>> import pandas as pd
>>> 
>>> df0 = pd.ExcelFile("id_data1.xls").parse("Sheet1")
>>> df1 = pd.ExcelFile("id_data2.xls").parse("Sheet1")
>>> df0 = df0.set_index("ID")
>>> df1 = df1.set_index("ID")
>>> df0
    A  B
ID      
1   a  e
2   b  f
3   c  g
4   d  h
>>> df1
    A          B
ID              
1   a          e
2   b  nolongerf
4   d          h
5   g          h

それらを整列させ、違いを確認し、結果をExcelファイルに保存できます。

>>> a0, a1 = df0.align(df1)
>>> different = (a0 != a1).any(axis=1)
>>> comp = a0[different].join(a1[different], lsuffix='_old', rsuffix='_new')
>>> comp
   A_old B_old A_new      B_new
ID                             
2      b     f     b  nolongerf
3      c     g   NaN        NaN
5    NaN   NaN     g          h
>>> comp.to_excel("comparison.xls")
>>>

等々。

于 2013-03-04T18:05:23.510 に答える
1

xlrdどちらも、xlwtExcelドキュメントの読み取り/書き込みに使用したPythonライブラリです。

于 2013-03-04T17:29:39.363 に答える
1

Excelファイルに1つまたはいくつかのタブしかない場合、最も簡単な解決策は、実際には、それぞれの個別のタブを個別のcsvとして保存しdiff、多くのプラットフォームのコマンドラインで、またはvim、emacs、またはnotepad++。

$ diff file1.csv file2.csv

http://unixhelp.ed.ac.uk/CGI/man-cgi?diff

多数のファイルでこれを実行する必要がある場合でも、sysライブラリを使用してunixdiffプログラムを繰り返し呼び出すためのスクリプトの接着剤としてのみPythonを使用することをお勧めします。

どうやら、Pythonに標準ライブラリに「difflib」がありますが、これまで使用したことはなく、誰かがそれについて話すのを聞いたこともありませんが、http://docs.pythonをご覧ください。 org / 2 / library / difflib.html

于 2013-03-04T18:09:26.207 に答える
0

私は数年前に同様の問題に直面し、最終的にソリューションにC#を選択しました。基本的な.NET環境を設定した後、わずかな労力でExcelスプレッドシートのコンテンツに直接アクセスすることができました。

Pythonを使用することにした場合、1つのアプローチは、COMオブジェクトを使用して各スプレッドシートの詳細にアクセスすることです。http: //oreilly.com/catalog/pythonwin32/chapter/ch12.html

私がC#を提案する理由は、.NETにはスプレッドシートへのアクセスを容易にするために特別に設計されたクラスがあるためです。 http://msdn.microsoft.com/en-us/library/7fzyhc74(v=vs.80).aspx

于 2013-03-04T17:49:55.867 に答える