Python批量合并365個(gè)工作表
一、引言
小明剛進(jìn)入到新公司,就被委以重任:將365個(gè)Excel文件中的英文表頭修改為中文。傳統(tǒng)方法是逐一打開每個(gè)文件,手動(dòng)修改標(biāo)題,然后保存,最后再合并。這種方法不僅耗時(shí)耗力,還容易出錯(cuò)。如果用Python就可以實(shí)現(xiàn)批量修改表頭,并快速合并,就可以大大地提速,這樣原本可能需要2天的工作量,可能只需要1分鐘就完成了。那么用Python又是如何實(shí)現(xiàn)的呢?
二、實(shí)現(xiàn)代碼
1. 使用pandas來合并
如果使用Python中的pandas的話,根據(jù)他的需求可以分為3步:
第一步:讀取所有xlsx文件,這時(shí)我們使用的是os模塊,利用os模塊批量獲取xlsx格式文件,由于有時(shí)還會(huì)有~.xlsx這種文件,干擾python讀取文件,所以要排除一下。
第二步:利用pandas模塊建立一個(gè)DataFrame,設(shè)定好表頭columns,后面合并xlsx時(shí)就不用讀取第一行表頭,直接進(jìn)行合并了。
第三步:利用for循環(huán),拼接路徑地址,逐個(gè)讀取xlsx文件,修改表頭后,再利用pandas中的concat來合并xlsx文件,合完成后輸出保存。
通過以上三步,就可以將 365 個(gè)xlsx文件合并成一個(gè),合并后的excel表頭按要求的中文來。只需編寫10多行代碼,他就可以在 2秒內(nèi)完成這項(xiàng)工作,而不是花費(fèi)24小時(shí)。
import os import pandas as pd import time t1 = time.time() #定義時(shí)間 # 定義文件夾路徑 folder_path = "./files/" # 獲取文件夾中所有Excel文件的文件名 file_list = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith("~")] # 初始化一個(gè)空的DataFrame,用于存放合并后的數(shù)據(jù) combined_df = pd.DataFrame(columns=['標(biāo)題', '日期', '檢查結(jié)果', '核檢員']) # 遍歷所有Excel文件,并將它們合并到一個(gè)DataFrame中 for file_name in file_list: file_path = os.path.join(folder_path, file_name) df = pd.read_excel(file_path) # 將列名改為所需的表頭 df.columns = ['標(biāo)題', '日期', '檢查結(jié)果', '核檢員'] # 將當(dāng)前文件的內(nèi)容追加到合并的DataFrame中 combined_df = pd.concat([combined_df, df], ignore_index=True) # 保存合并后的數(shù)據(jù)到一個(gè)新的Excel文件 output_file = "combined_quality_report.xlsx" combined_df.to_excel(output_file, index=False) print(f"所有文件已成功合并,并保存為 {output_file},\n耗時(shí):{round(time.time()-t1, 1)}秒")
2.使用openpyxl來合并
由于pandas在打包時(shí)不太方便,因此為了跨平臺(tái)操作,我們可以把它改為openpyxl,當(dāng)然我們可以不用手工去改,只把上面這些代碼放到ChatGPT中,給出指令就可以了。
在使用openpyxl時(shí),我們修改代碼的邏輯,直接從第二行來讀取,簡化讀取步驟,而不用更新讀取excel的表頭了,這樣可以保證其生成的速度還可以提高不少。步驟如下:
第一步,使用 openpyxl 創(chuàng)建一個(gè)新的工作簿。
第二步,讀取每個(gè)文件的內(nèi)容并跳過表頭,只合并數(shù)據(jù)行。
第三步,最后將合并的數(shù)據(jù)保存到一個(gè)新的Excel文件中。
實(shí)現(xiàn)的代碼如下:
import os import time from openpyxl import Workbook,load_workbook # 定義時(shí)間 t1 = time.time() # 定義文件夾路徑 folder_path = "./files/" # 獲取文件夾中所有Excel文件的文件名 file_list = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith("~")] # 創(chuàng)建一個(gè)新的工作簿和活動(dòng)工作表 combined_wb = Workbook() combined_ws = combined_wb.active # 添加表頭 headers = ['標(biāo)題', '日期', '檢查結(jié)果', '核檢員'] combined_ws.append(headers) # 遍歷所有Excel文件,并將它們合并到新的工作表中 for file_name in file_list: file_path = os.path.join(folder_path, file_name) wb = load_workbook(file_path) ws = wb.active # 跳過表頭,從第二行開始讀取數(shù)據(jù) for row in ws.iter_rows(min_row=2, values_only=True): combined_ws.append(row) # 將每一行數(shù)據(jù)添加到合并的工作表中 # 保存合并后的數(shù)據(jù)到一個(gè)新的Excel文件 output_file = "combined_quality_report.xlsx" combined_wb.save(output_file) print(f"所有文件已成功合并,并保存為 {output_file},\n耗時(shí):{round(time.time() - t1, 1)}秒")
三、學(xué)后總結(jié)
在數(shù)字化辦公時(shí)代,掌握編程和自動(dòng)化技能對(duì)提升工作效率至關(guān)重要。Python作為一種易學(xué)且功能強(qiáng)大的編程語言,在處理重復(fù)性工作時(shí)展現(xiàn)出巨大潛力。如果你也想擺脫繁重的重復(fù)勞動(dòng),不妨嘗試學(xué)習(xí)Python編程,讓你的辦公效率直線上升。
到此這篇關(guān)于Python批量合并365個(gè)工作表的文章就介紹到這了,更多相關(guān)Python合并工作表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pandas 解決dataframe的一列進(jìn)行向下順移問題
今天小編就為大家分享一篇Pandas 解決dataframe的一列進(jìn)行向下順移問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python實(shí)現(xiàn)智能貪吃蛇游戲的示例代碼
我想大家都玩過諾基亞上面的貪吃蛇吧,這篇文章將帶你一步步用python語言實(shí)現(xiàn)一個(gè)snake小游戲,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-07-07django框架使用views.py的函數(shù)對(duì)表進(jìn)行增刪改查內(nèi)容操作詳解【models.py中表的創(chuàng)建、views.py中
這篇文章主要介紹了django框架使用views.py的函數(shù)對(duì)表進(jìn)行增刪改查內(nèi)容操作,結(jié)合實(shí)例形式詳細(xì)分析了models.py中表的創(chuàng)建、views.py中函數(shù)的使用,基于對(duì)象的跨表查詢等相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2019-12-12Python 正則表達(dá)式中re.group()使用小結(jié)
正則表達(dá)式是在處理字符串時(shí)非常有用的工具,而re.group()是在匹配到的文本中提取特定分組內(nèi)容的方法之一,這篇文章主要介紹了Python 正則表達(dá)式之re.group()用法,需要的朋友可以參考下2024-01-01Python實(shí)現(xiàn)基于POS算法的區(qū)塊鏈
這篇文章主要介紹了Python實(shí)現(xiàn)基于POS算法的區(qū)塊鏈,今天我們就來認(rèn)識(shí)POS(proof of stake)算法。需要的朋友可以參考下2018-08-08