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