python項目實戰:文件數據對比,小白看了都會,值得收藏

python因為其簡單易學,數據開源,並且功能強大,因此受到很多程序員的歡迎,下面我來手把手的教你用python做項目,希望能夠幫到各位。

為了方便大家的瞭解,我對各個函數的功能和代碼都加了註釋,一般即使沒有編程經驗的人也能夠輕而易舉的看懂以下代碼(該代碼複製後也可以直接運行,不過其中加載的庫本地需要安裝得有,比如difflib庫,win32api等)。

下面簡單介紹該項目的內容:該項目是為了實現對文本和excel數據的對比,並將兩個文件中不同的部分標記出來。保存到對應的比對結果中,廢話不多說,我們來看看對應的代碼。具體代碼如下:

import sys

import difflib

import win32ui

import xlrd

import xlwt

import win32api,win32con


# =============================================================================

# # 讀取配置文件函數

def read_file(file_name):

try:

file_handle = open(file_name, 'r',encoding='ANSI')

text = file_handle.read().splitlines() # 讀取後以行進行分割

file_handle.close()

return text

except IOError as error:

print('Read file Error: {0}'.format(error))

sys.exit()


# #打開並獲取文件路徑1

def getcompFileName1(file1_name):

dlg = win32ui.CreateFileDialog(1) # 1表示打開文件對話框

dlg.SetOFNInitialDir('E:/') # 設置打開文件對話框中的初始顯示目錄

dlg.DoModal()

filename = dlg.GetPathName() # 獲取選擇的文件名稱

file1_name = filename

return file1_name


# #打開並獲取文件路徑2

def getcompFileName2(file2_name):

file2_name = filename

return file2_name

# # 比較兩個文件並輸出html格式的結果

def compare_file(file1_name, file2_name):

if file1_name == "" or file2_name == "":

print('文件路徑不能為空:file1_name的路徑為:{0},file2_name的路徑為:{1} .'.format(file1_name, file2_name))

text1_lines = read_file(file1_name)

text2_lines = read_file(file2_name)

diff = difflib.HtmlDiff() # 創建htmldiff 對象

result = diff.make_file(text1_lines, text2_lines) # 通過make_file 方法輸出 html 格式的對比結果

# 將結果保存到比較結果.html文件中並打開

with open('文本比較結果.html', 'w') as result_file: #同 f = open('文本比對結果.html', 'w') 打開或創建一個比對結果.html文件

result_file.write(result) #同 f.write(result)

win32api.MessageBox(0,"比對結束,結果存放在當前目錄的文本比較結果.html中","程序運行結束",win32con.MB_OK)

print ('寫入html文件錯誤:{0}'.format(error))

# # 比較兩個excel文件並輸出excel格式的結果

# 輸入兩個excel文件進行比較

def compare_excel(file1_name, file2_name):

open_excel1 = xlrd.open_workbook(file1_name) #用於比較的第一個文件

open_excel2 = xlrd.open_workbook(file2_name)#用於比較的第二個文件

result_excel = xlwt.Workbook() #創建一個文件用來存放比較結果

excel1_name = open_excel1.sheet_names()

comp_restult = result_excel.add_sheet("excel數據比對結果")

tp = open_excel1.sheet_by_name(excel1_name[0]) #打開excel文件中的第一個表格

excel2_name = open_excel2.sheet_names()

tp1 = open_excel2.sheet_by_name(excel2_name[0])

for i in range(tp.nrows):

for j in range(tp.ncols):

if str(tp.cell(i,j).value) != str(tp1.cell(i,j).value): #將兩個excel表格中同行同列進行比較

style = xlwt.easyxf('font:bold 1, color blue;') #設置不匹配內容的字體及其顏色

result = str(tp.cell(i,j).value) + "和" + str(tp1.cell(i,j).value) + "不匹配"

comp_restult.write(i, j, result, style)

else:

comp_restult.write(i, j, tp.cell(i,j).value)

result_excel.save('excel比對結果.xls')

win32api.MessageBox(0,"比對結束,結果存放在當前目錄的excel比對結果.xls中","程序運行結束",win32con.MB_OK)

# 調用各個函數運行得到對應的結果

if __name__ == "__main__":

file1_name = " "

file1 = getcompFileName1(file1_name)

file2_name = " "

file2 = getcompFileName2(file2_name)

if (file1.endswith('.txt')) and (file2.endswith('.txt')): #在同為文本的時候進行比較

compare_file(file1, file2)

else:

compare_excel(file1, file2) #excel文件比較結果

部分代碼示意圖:

python項目實戰:文件數據對比,小白看了都會,值得收藏

該項目的部分代碼示意圖


上述代碼變編譯後即可運行,具體操作如下:運行後後大約過了3秒鐘,會彈出文件選擇對話框。

這裡需要注意的是,該工具只是針對兩個文件都是文本模式或者都是excel模式的文件進行對比,所以選擇對比文件的時候不能一個是excel,而另一個是txt文本。目前該工具也只支持文本和excel文件的對比。彈出選擇文件的界面如下圖:


python項目實戰:文件數據對比,小白看了都會,值得收藏

在彈出的對話框中選擇對應的文件


打開兩個對比的文件後,軟件會自動運行,將兩個文件進行對比,對比完成後會有對應的提示,然後單擊確定即可。如下圖:


python項目實戰:文件數據對比,小白看了都會,值得收藏

運行結束後的對話框


我們打開軟件目錄,既可以看到比對結果,如下圖:


python項目實戰:文件數據對比,小白看了都會,值得收藏

excel數據表比對後結果存放目錄


雙擊打開對應的比對結果,既可以看到標亮的地方就是兩個文件不相同的地方,如下圖:

python項目實戰:文件數據對比,小白看了都會,值得收藏

excel比對結果示例


文本模式的對比方式類似,只是在最終對比結果中,文本模式轉化成了html模式。

這就是今天為大家分享的python項目實戰代碼,希望大家喜歡!也希望大家多多關注點贊,祝各位生活愉快!


分享到:


相關文章: