補充篇:盤點六種使用 Python 批量合并同一文件夾內所有子文件夾下的Excel文件內所有Sheet數據
一、前言
大家好,我是Python進階者。前一陣子給大家分享了Python自動化文章:手把手教你利用Python輕松拆分Excel為多個CSV文件,手把手教你4種方法用Python批量實現多Excel多Sheet合并,而后在Python進階交流群里邊有個叫【扮貓】的粉絲遇到一個問題,她有很多個Excel表格,而且多個excel里多個sheet表,現在需要對這些Excel文件進行合并。
用上面鏈接對應的方法進行合并,發現只能夠合并Sheet,其他的就合并不了,這確實是個問題。
誠然,一個一個打開復制粘貼固然可行,但是該方法費時費力,還容易出錯,幾個文件還可以手動處理,要是幾十個甚至上百個,你就抓瞎了,不過這問題對Python來說,so easy,一起來看看吧!
二、說明
前天本來針對這個問題,已經發布了一篇文章,盤點4種使用Python批量合并同一文件夾內所有子文件夾下的Excel文件內所有Sheet數據,里邊盤點了4個方法,測試之后完全可行,這篇文章十分的受歡迎,評論和點贊真不錯。
今天這里繼續補充兩個方法,高手在民間,感謝【??(這是月亮的背面)】和【韓峰】兩位大佬提供的思路和代碼。
三、項目實現
之前提供4種方法,在這里就不再贅述了,大家可以戳這篇文章自行獲取學習,源碼都在文章中了,盤點4種使用Python批量合并同一文件夾內所有子文件夾下的Excel文件內所有Sheet數據。這里給大家介紹另外兩種方法,一起來看看吧!
1、方法五
這個方法是來自【韓峰】大佬的分享,代碼如下。
- # -*- coding: utf-8 -*-
- import pandas as pd
- import os
- path = r'E:\PythonCrawler\python_crawler-master\MergeExcelSheet\file\777'
- file_list = []
- for root, dirs, filename in os.walk(path):
- for file in filename:
- file_list.append(path + '\\' + file)
- # The_All_data = pd.DataFrame()
- All_data = pd.DataFrame()
- for Prowler in file_list:
- ereader = pd.ExcelFile(Prowler) # 讀到文件名稱
- one_sheet_name = ereader.sheet_names # 讀到文件中所有sheet的名字
- for Sheet_Prowler in one_sheet_name:
- All_sheet_data = pd.read_excel(ereader, sheet_name=Sheet_Prowler) # 讀取文件名稱中所有sheet的數據
- temp = pd.concat([All_data, All_sheet_data])
- All_data = pd.DataFrame(temp)
- # Montage = pd.concat([The_All_data, All_sheet_data]) # 拼接表格:將一個一個表格中所有sheet的數據放到匯總表之中
- # The_All_data = pd.DataFrame(Montage) # 將添加了新的數據的表格賦值給總表,下一次就會接到這個表的最后面。
- print(All_data)
- All_data.to_csv(r'E:\PythonCrawler\python_crawler-master\MergeExcelSheet\file\777\The_All_data.csv')
上面這個代碼是可以跑起來了,功能上實現沒有問題,其實邏輯和之前的方法是一致的,就是變量命名方面看著有些讓人不太舒服。
2、方法六
這個方法是來自【??(這是月亮的背面)】大佬的分享,代碼如下。
- # -*- coding: utf-8 -*-
- from pathlib import Path
- import pandas as pd
- path = Path(r'E:\PythonCrawler\python_crawler-master\MergeExcelSheet\file\888')
- pd.concat([pd.concat(pd.read_excel(i, sheet_name=None)) for i in path.glob("[!~]*.xls*")],
- ignore_index=True).to_excel("result.xlsx", index=False)
- print('合并完成!')
如果沒有前面幾個方面的鋪墊,上來直接看這個代碼,相信大部分都直接暈乎了,我這里給他稍微拆分了下,方便大家理解,實際上確實是一行代碼,可以在上面的聊天截圖中看到,著實精辟!
關于效果展示方面,這里就不貼圖了,親測好使。
說到這里,又想多嘮叨兩句,有時候看別人的代碼,確實可以跑,自己拿過來,不一定能跑,就很迷,下圖是【冫馬讠成】大佬自己測試的時候遇到的問題,其實就是少模塊,安裝xlrd之后,就可以運行正常了。
四、總結
本文從實際工作出發,基于Python編程,介紹了6種方法,實現批量合并同一文件夾內所有子文件夾下的Excel文件內所有Sheet數據,為大家減少了很多復制粘貼的麻煩,省時省力,還不容易出錯。代碼不多,循環追加有點繞,想想也就明白了,不懂的隨時留言提問,大家一起學習進步。
有想法的小伙伴還可以將文章中的代碼進行打包,做成一個exe可執行的小軟件,包裝好發給別人使用,也可以賺點小費噢,關于打包的教程這里不再贅述,歡迎前往:三個你必須要記住的Pyinstaller打包命令——利用Python實現打包exe。