手把手教你4種方法用Python批量實現多Excel多Sheet合併

2021-03-02 Python爬蟲與數據挖掘

回復「書籍」即可獲贈Python從入門到進階共10本電子書

一、前言

大家好,我是崔豔飛。前兩天給大家分享了Python自動化文章:手把手教你利用Python輕鬆拆分Excel為多個CSV文件,而後在Python進階交流群裡邊有讀者遇到一個問題,他有很多個Excel表格,他需要對這些Excel文件進行合併。

誠然,一個一個打開複製粘貼固然可行,但是該方法費時費力,還容易出錯,幾個文件還可以手動處理,要是幾十個甚至上百個,你就抓瞎了,不過這問題對Python來說,so easy,一起來看看吧!

二、項目目標

用Python實現多Excel、多Sheet的合併處理。


三、項目準備

軟體:PyCharm

需要的庫:pandas, xlrd,os


四、項目分析1)如何選擇要合併的Excel文件?

利用os,獲取所有要合併的Excel文件。

2)如何選擇要合併的Sheet?

利用xlrd庫進行Excel讀取,獲取要合併的Sheet名。

3)如何合併?

利用pandas庫,對所有Sheet名逐一循環打開,通過concat()進行數據追加合併即可。

4)如何保存文件?

利用to_excel保存數據,得到最終合併後的目標文件。


五、項目實現1、第一步導入需要的庫
import pandas as pdimport xlrdimport os

2、第二步選擇要合併的Excel文件
     path="D:/b/"        xlsx_names = [x for x in os.listdir(path) if x.endswith(".xlsx")]

3、第三步選擇要合併的Sheet
    xlsx_names1 = xlsx_names[0]
aa = path + xlsx_names1 first_file_fh=xlrd.open_workbook(aa) first_file_sheet=first_file_fh.sheets()

4、第四步對Sheet內容進行循環合併
       for sheet_name in sheet_names:        df = None                for xlsx_name in xlsx_names:            sheet_na = pd.ExcelFile(path + xlsx_name).sheet_names            if sheet_name in sheet_na:                                _df = pd.read_excel(path + xlsx_name, sheet_name=sheet_name,header=None)                if df is None:                    df = _df                else:                    df = pd.concat([df, _df], ignore_index=True)            else:continue

5、第五步保存合併後的文件
  

      df.to_excel(excel_writer=writer, sheet_name=sheet_name, encoding="utf-8", index=False)        print(sheet_name + "  保存成功!共%d個,第%d個。" % (len(sheet_names),num))        num += 1    writer.save()    writer.close()

六、效果展示

1、處理前Excel數據:

2、運行進度提示:

3、合併後的結果:


七、總結

本文介紹了如何利用Python對多個Excel文件、多Sheet進行合併處理,減少了很多複製粘貼的麻煩,省時省力,還不容易出錯,代碼不多,循環追加有點繞,想想也就明白了,不懂的隨時留言提問,大家一起學習進步。

有想法的小夥伴還可以將文章中的代碼進行打包,做成一個exe可執行的小軟體,包裝好發給別人使用,也可以賺點小費噢,關於打包的教程這裡不再贅述,歡迎前往:三個你必須要記住的Pyinstaller打包命令——利用Python實現打包exe。


八、彩蛋

下面兩份代碼是群內小夥伴提供了,小編也自行測試了下,親測有效,歡迎大家積極嘗試噢!

來自群友Jayson的代碼:

import os import globimport openpyxl
def merge_xlsx_files(xlsx_files): wb = openpyxl.load_workbook(xlsx_files[0]) ws = wb.active ws.title = "merged result"
for filename in xlsx_files[1:]: workbook = openpyxl.load_workbook(filename) sheet = workbook.active for row in sheet.iter_rows(min_row=1): values = [cell.value for cell in row] ws.append(values) return wb
def get_all_xlsx_files(path): xlsx_files = glob.glob(os.path.join(r'C:\\Users\\pdcfi\\Desktop\\', '*.xlsx')) sorted(xlsx_files, key=str.lower) return xlsx_files
def main(): xlsx_files = get_all_xlsx_files(os.path.expanduser('~lmx')) wb = merge_xlsx_files(xlsx_files) wb.save('merged_form.xlsx')
if __name__ == '__main__': main() print("all excel append OK!")

來自好友劉早起的代碼:

from openpyxl import load_workbook, Workbookimport glob
path = "C:\\Users\\pdcfi\\Desktop\\excel\\"new_workbook = Workbook()new_sheet = new_workbook.active
flag = 0
for file in glob.glob(path + '/*.xlsx'): workbook = load_workbook(file) sheet = workbook.active
coloum_A = sheet['A'] row_lst = [] for cell in coloum_A: if cell: print(cell.row) row_lst.append(cell.row)
if not flag: header = sheet[1] header_lst = [] for cell in header: header_lst.append(cell.value) new_sheet.append(header_lst) flag = 1
for row in row_lst: data_lst = [] for cell in sheet[row]: data_lst.append(cell.value) new_sheet.append(data_lst)
new_workbook.save(path + '/' + '符合篩選條件的新表.xlsx')

來自群友Engineer的代碼:

import tkinter as tkfrom tkinter import filedialogimport osimport pandas as pdimport glob
root = tk.Tk()root.withdraw()
filelocation = os.path.normpath(filedialog.askdirectory(initialdir=os.getcwd()))lst = []
for i in glob.glob(filelocation + "\\\\" + "*.*"): if os.path.splitext(i)[1] in [".xls", ".xlsx"]: lst.append(pd.read_excel(i))
writer = pd.ExcelWriter(filedialog.asksaveasfilename(title="保存", initialdir=filelocation, defaultextension="xlsx", filetypes=[("Excel 工作簿", "*.xlsx"), ("Excel 97-2003 工作簿", "*.xls")]))pd.concat(lst).to_excel(writer, 'all', index=False)writer.save()
print('\n%d個文件已經合併成功!' % len(lst))

最後需要本文項目代碼的小夥伴,請在公眾號後臺回復「合併文件」關鍵字進行獲取,如果在運行過程中有遇到任何問題,請隨時留言或者加小編好友,小編看到會幫助大家解決bug噢!

當然了,實現本文功能不僅僅限於上面提及的3種方式,使用pandas也是可以做到的,如果你還有其他方法,歡迎交個朋友一起學習交流。

小編最近建立了一個Python付費學習交流群,只需要9.99元小紅包即可入群學習交流,大家的學習氛圍很好,有問必答,裡邊「無絲竹亂耳,亦無案牘勞形」,純交流學習之用,感興趣的小夥伴可以加下方小編微信進群學習交流噢!

------------------- End -------------------

往期精彩文章推薦:

歡迎大家點讚,留言,轉發,轉載,感謝大家的相伴與支持

想加入Python學習群請在後臺回復【入群

萬水千山總是情,點個【在看】行不行

/今日留言主題/

隨便說一兩句吧~

相關焦點

  • python操作excel:批量為多個sheet頁生成超連結
    python操作excel:批量為多個sheet頁生成超連結@toc[1]需求excel文件內存在多個sheet頁,想要將總表中的信息進行關聯和對應的
  • 使用Python對Excel多sheet合併與大規模數據集讀取,看這一篇就夠了
    問題描述在日常工作中,我們可能會遇到一些 Excel 文件,其中會有多個 sheet,每個 sheet 中的數據結構都相同,在分析的時候需要合併後再處理。如果文件數據量較小倒還好,萬一遇上幾百幾千萬行的多 sheet 的 Excel 文件,光是打開就要卡死老半天,更不要提處理數據了。本文就如何提高大數據量 Excel 多sheet 文件時的讀取效率,運用 Python 工具進行解決。
  • Python讀寫Excel表格,就是這麼簡單粗暴又好用
    python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。可從這裡下載https://pypi.python.org/pypi。下面分別記錄python讀和寫excel。
  • Python讀寫Excel表格,就是這麼簡單粗暴又好用(文末送書)
    python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。可從這裡下載https://pypi.python.org/pypi。下面分別記錄python讀和寫excel。
  • 如何用python實現excel中的vlookup功能?
    具體做的是什麼,暫時先賣個關子,請大家持續關注,後面你就知道了。因為刀哥是python初學者,對於需要用到的知識點,如果以前學過的要再複習一下,年紀大了嘛記性比較差,沒學過的新知識點要先學習一下,邊學邊用,所以做的速度比較慢,但是好在,哪怕慢,只要每天進步一點點,都是好的。
  • 未明學院:用excel不好嗎?為什麼還要學python?
    在大數據背景的今天,面對千萬條以上動輒成百上千G的數據,單用excel難免顯得力不從心,越來越多的人將關注點轉向python。1、易踩坑!而python在數據處理的量級和性能上明顯高於excel,對python來說,只需調用drop_duplicates方法就可以輕鬆處理大批量數據,無需擔心軟體崩潰異常退出。
  • 14-用Python 讀寫 Excel 文件
    最大支持行數為1048576行),人們開始轉向python和R這樣的分析工具了XlsxWriterxlrd&xlwt[2]OpenPyXL[3]Microsoft Excel API[4]介紹可以創建 Excel 2007 或更高版本的 XLSX 文件即 python-excel,含 xlrd、xlwt 和 xlutils 三大模塊,分別提供讀、寫和其他功能可以讀寫 Excel
  • Python操作Excel,將匯總數據分到不同sheet
    方法一:讀取原Excel,根據country列將不同的內容放到不同的sheet,並根據國家名稱命名,將結果放到新的輸出文件中。import pandas as pdinput_file = "F://python入門//數據2//appname_test.xlsx"output_file = "F://python入門//數據2//output.xlsx"data_frame = pd.read_excel(input_file,sheet_name='sum1'
  • 6000字長文,帶你用Python完成 「Excel合併(拆分)」 的各種操作!
    今天我們就利用Python完成「Excel合併(拆分)」 操作,具體如下:① 將多個Excel表,合併到一個Excel中(每個Excel中只有一個sheet表);② 將多個Excel表,合併到一個Excel中(每個Excel中不只一個sheet表);③ 將一個Excel表中的多個sheet表合併,並保存到同一個excel;二、知識點講解
  • Python辦公自動化| word 表格轉excel
    之前寫過一篇 Python辦公自動化 | 批量word報告生成工具 ,有小夥伴提出了逆向需求,即:從批量word中獲取內容並寫入excel,需求背景是匯總一些材料,舉例:實習鑑定表、個人簡歷、檔案等。實際需求是這樣的,現在有如下格式的若干word文檔,需要錄入標黃信息到excel,手工錄入效率太低了,能不能用python實現呢?
  • 基於Python實現對各種數據文件的操作
    更多參考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html#pandas.read_excel不同於csv文件,xlsx文件中會有多個sheet,pandas.read_excel函數默認讀取第一個sheet.
  • 如何用Python輕鬆搞定Excel日常任務
    本文將告訴你,這三項Excel日常任務,如何用Python輕鬆搞定。首先導入Pandas並根據工作簿中可用的工作表加載兩個dataframe,稱它們為sales和states。import pandas as pdsales = pd.read_excel('https://github.com/datagy/mediumdata/raw/master/pythonexcel.xlsx', sheet_name ='sales')states = pd.read_excel
  • PYTHON-1 根據excel中的url 批量下載圖片
    學習分享:包括但不限於計算機學習、數學、英語等;影音分享:我個人喜歡的影視作品,以及音樂;今天主要分享我前段時間為了解決批量下載圖片寫的一段python代碼過程。讀取excel文件存儲路徑並讀取文件內容;按照文件中一級分類->二級分類批量創建文件夾,並根據圖片的url下載圖片(for循環+if判斷);代碼示例:import xlrdimport requestsimport numpy as npimport pandas as pdimport
  • 文職美女上班手動用Excel表格太麻煩,當學會python後easy操作
    通過程序操作excel表格是編程中比較常見的操作,python本身不能直接操作excel,需要安裝第三方的模塊來實現excel的操作。Python中可以操作excel模塊主要有:1、xlrd 模塊實現exlcel表格讀取2、xlwd 模塊實現excel表格創建和寫入3、pandas模塊也可以實現excel常規操作
  • 怎麼用excel計算百分比 手把手教你用excel計算百分比
    怎麼用excel計算百分比 手把手教你用excel計算百分比時間:2018-03-28 07:41   來源:未知   責任編輯:沫朵 川北在線核心提示:原標題:怎麼用excel計算百分比 手把手教你用excel計算百分比 怎麼用excel計算百分比?
  • 如何將多個Excel文件瞬間合併成一個Sheet頁
    本文提供了兩種方法,如果讀者有需要,只需按說明複製粘貼即可實現。二、方法一:Excel宏(零基礎簡單五步搞定)談到宏,很多人覺得很複雜,莫急,你無需深究原理,按以下操作即可:1.把要合併的文件放在同一個文件夾中;2.在文件夾中新建一個Excel文件,如下圖《新建 Microsoft Office Excel 工作表.xlsx
  • 詳解Python操作Excel文件
    前言本篇文章主要總結了一下利用python操作Excel文件的第三方庫和方法。常見庫簡介1.xlrdxlrd是一個從Excel文件讀取數據和格式化信息的庫,支持.xls以及.xlsx文件。4.xlwingsxlwings是一個可以實現從Excel調用Python,也可在python中調用Excel的庫。地址:http://docs.xlwings.org/en/stable/index.html4、強大的轉換器可以處理大部分數據類型,包括在兩個方向上的numpy array和pandas DataFrame。
  • python+xlrd+xlwt操作excel
    則先運行python ez_setup.py之後在重複上面的步驟PS:office的版本不要用太高的,建議最好用03版本的,且後綴為xls的源碼bug修復安裝好xlwt3後,找到formula.py文件,將其中的__slots__ = ["__init__", "__s", "__parser
  • 從Excel中解救你!如何用Python實現報表自動化
    Excel無處不在,即便有著像Python這樣的強大工具任你使用,你也難以從中逃脫。也許你的老闆和同事仍然需要這種簡單的方法來訪問重要數據。但沒關係!那並不意味著你不能通過使用Python來簡化Excel工作。全程無需使用Excel,逃離報表魔爪!
  • 一文掌握Excel、PowerBI、SQL、Python【數據合併】大法
    ~       在工作中,會經常遇到將多張表合併為一張表的需求;面試的時候,數據合併方法、左連接、右連接、內連接的區別也經常會被面試官問到。本文主要介紹利用常用分析軟體(Excel、PowerBI、MySQL、Python)實現數據橫向連接的幾種方法。