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文件比較結果
部分代碼示意圖:
上述代碼變編譯後即可運行,具體操作如下:運行後後大約過了3秒鐘,會彈出文件選擇對話框。
這裡需要注意的是,該工具只是針對兩個文件都是文本模式或者都是excel模式的文件進行對比,所以選擇對比文件的時候不能一個是excel,而另一個是txt文本。目前該工具也只支持文本和excel文件的對比。彈出選擇文件的界面如下圖:
打開兩個對比的文件後,軟件會自動運行,將兩個文件進行對比,對比完成後會有對應的提示,然後單擊確定即可。如下圖:
我們打開軟件目錄,既可以看到比對結果,如下圖:
雙擊打開對應的比對結果,既可以看到標亮的地方就是兩個文件不相同的地方,如下圖:
文本模式的對比方式類似,只是在最終對比結果中,文本模式轉化成了html模式。
這就是今天為大家分享的python項目實戰代碼,希望大家喜歡!也希望大家多多關注點贊,祝各位生活愉快!