程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 實現不同目錄下excel文件對比

編輯:Python

最近在做python腳本開發相關的工作,需要對比兩個文件夾下所有excel文件及裡面單元格行數差異 , 並把差異行數輸出 , 之前寫過excel 文件內容對比,具體是用的pandas類庫的 compare 方法來實現內容對比的,因為兩個相差不是很大,在這裡就不做展示了 ,僅把行數對比的代碼做一個展示

import pandas as pd
import os
import datetime
def get_file_name_list(path):
list = []
for root_dir, sub_dir, files in os.walk(path):
for file in files:
if file.endswith(".xlsx"):
list.append(file)
return list
def svn_than_git_list(svn_list, git_list):
list = []
for svn_name in svn_list:
if svn_name not in git_list:
list.append(svn_name)
return list
def git_than_svn_list(svn_list, git_list):
list = []
for git_name in git_list:
if git_name not in svn_list:
list.append(git_name)
return list
def excel_compare(source_path, svn_path):
start = datetime.datetime.now() # 記錄程序開始運行時間
# 源文件集合 XXX.xlsx
sourceNameList = get_file_name_list(source_path)
# 目標文件集合 XXX.xlsx
svnNameList = get_file_name_list(svn_path)
svn_than = svn_than_git_list(svnNameList, sourceNameList)
print('目標文件比源文件多出的文件 : ')
print(svn_than)
source_than = git_than_svn_list(svnNameList, sourceNameList)
print('源文件比目標文件多出的文件 : ')
print(source_than)
# 遍歷源文件目錄下所有excel文件
for source_name in sourceNameList:
# 根據excel文件地址獲取源目錄下sheetName集合
source_sheet_list = pd.ExcelFile(source_path + source_name).sheet_names
if source_name not in svnNameList:
continue
print()
print('文件名稱 ', end=" ")
print(source_name)
# 遍歷sheet集合
for git_sheet_name in source_sheet_list:
# 根據路徑 + sheetName 獲取指定sheet數據
source_sheet = pd.read_excel(source_path + source_name, sheet_name=git_sheet_name, index_col=0)
# 判斷 excel文件是否在目標下存在
if source_name in svnNameList:
# 根據excel文件地址獲取目標文件目錄下sheetName集合
svn_sheet_list = pd.ExcelFile(svn_path + source_name).sheet_names
# 判斷 該excel表格在 對應s目標 excel是否存在
if git_sheet_name in svn_sheet_list:
# 該excel表格存在目標文件中;獲取目標Excel表格
svn_sheet = pd.read_excel(svn_path + source_name, sheet_name=git_sheet_name, index_col=0)
# 比較單元格是否一致,不一致輸出差異
try:
num = abs(source_sheet.shape[0] - svn_sheet.shape[0])
if num > 0:
print('表格名稱 ', end=" ")
print(git_sheet_name, end=" ")
print('源文件表格行數 :', end=" ")
print(source_sheet.shape[0], end=" ")
print('目標文件表格行數 : ', end=" ")
print(svn_sheet.shape[0], end=" ")
print('行數差異 : ', end=" ")
print(num, end="")
else:
print('表格名稱 ', end=" ")
print(git_sheet_name, end=" ")
print('源文件表格行數 :', end=" ")
print(source_sheet.shape[0], end=" ")
print('目標文件表格行數 : ', end=" ")
print(svn_sheet.shape[0], end=" ")
print('行數差異 : ', end=" ")
print(num)
# print('源文件表格行數 : ' + source_sheet.shape[0] + ' 目標文件表格行數 : ' + svn_sheet.shape[0])
except:
continue
else:
# 該excel表格在 對應目標 excel不存在;打印文件路徑
print(source_path + source_name + '.' + git_sheet_name + ' 單元格在目標文件中不存在')
else:
# 將excel表格內容置空
svn_sheet_list = None
# 檢查svn單元格存在,源文件不存在該單元格情況
try:
for svn_sheet_name in svn_sheet_list:
if svn_sheet_name not in source_sheet_list:
print(svn_path + source_name + '.' + svn_sheet_name + ' 單元格在源文件中不存在')
except:
continue
end = datetime.datetime.now() # 記錄程序結束運行時間
print((end - start))
if __name__ == '__main__':
# TODO 服務器目標文件臨時目錄
target_path= '/data/app/excel/'
# TODO 比對數據源
source_path = '/data/app/resources/'
# excel進行對比
excel_compare(source_path, svn_local_temp_dir)
# 刪除對比文件
shutil.rmtree('/data/app/excel')
print('excel對比結束')

首先會對比兩個文件夾下excel文件是否一致,並把兩邊缺失的文件打印,接著對比相同的文件,然後對比文件內單元格中行數是否一致,並把行數進行打印 ,具體的功能就是著這樣 有問題可以溝通,共同學習
read_excel 這個函數的參數比較多,實現 compare 需要展示 具體的數據可以根據 read_excel ()參數來確定,我們這邊第一列為id列,需要展示出來使用了 index_col=0 參數配置,其它的可以查閱資料使用


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved