python實(shí)現(xiàn)對(duì)excel的覆蓋和追加操作
在 Python 中處理 Excel 文件時(shí),覆蓋寫入和追加寫入是兩種常見需求。通常使用 pandas 結(jié)合 openpyxl 或直接使用 openpyxl 來實(shí)現(xiàn)。
下面分別給出覆蓋寫入和追加寫入的示例。
一、覆蓋寫入(清空原文件,寫入新數(shù)據(jù))
覆蓋寫入意味著每次運(yùn)行代碼時(shí),都會(huì)完全替換原有 Excel 文件中的內(nèi)容。
1.1 使用 pandas 實(shí)現(xiàn)覆蓋寫入
import pandas as pd
# 創(chuàng)建示例數(shù)據(jù)
data = {
'姓名': ['張三', '李四', '王五'],
'分?jǐn)?shù)': [85, 92, 78]
}
df = pd.DataFrame(data)
# 覆蓋寫入(如果文件已存在會(huì)被覆蓋)
df.to_excel('成績(jī)表.xlsx', index=False, sheet_name='Sheet1')
print("覆蓋寫入完成")1.2 使用 openpyxl 實(shí)現(xiàn)覆蓋寫入
直接創(chuàng)建新的 Workbook 并保存,會(huì)覆蓋原有文件。
from openpyxl import Workbook
# 創(chuàng)建新工作簿
wb = Workbook()
ws = wb.active
ws.title = "Sheet1"
# 寫入表頭和數(shù)據(jù)
ws.append(['姓名', '分?jǐn)?shù)'])
ws.append(['張三', 85])
ws.append(['李四', 92])
ws.append(['王五', 78])
# 保存(覆蓋)
wb.save('成績(jī)表.xlsx')
print("覆蓋寫入完成")二、追加寫入(保留原數(shù)據(jù),在末尾添加新行或新工作表)
追加寫入分為兩種情況:
- 在已有工作表末尾追加新行(不覆蓋原有數(shù)據(jù))
- 在同一個(gè)文件里增加新的工作表
2.1 使用 pandas + openpyxl 在現(xiàn)有工作表末尾追加行
pandas 的 to_excel 默認(rèn)會(huì)覆蓋整個(gè)文件,要實(shí)現(xiàn)追加,需要借助 openpyxl 讀取原有數(shù)據(jù)并合并。
方法一:先讀取原有數(shù)據(jù),合并后再寫入(適合數(shù)據(jù)量不大的情況)
import pandas as pd
from openpyxl import load_workbook
# 原有文件路徑
file_path = '成績(jī)表.xlsx'
# 讀取原有數(shù)據(jù)
try:
df_old = pd.read_excel(file_path, sheet_name='Sheet1')
except FileNotFoundError:
df_old = pd.DataFrame(columns=['姓名', '分?jǐn)?shù)']) # 如果文件不存在則創(chuàng)建空DataFrame
# 新數(shù)據(jù)
new_data = pd.DataFrame({'姓名': ['趙六', '小明'], '分?jǐn)?shù)': [88, 95]})
# 合并
df_new = pd.concat([df_old, new_data], ignore_index=True)
# 寫回文件(覆蓋原文件,實(shí)際是替換整個(gè)內(nèi)容)
df_new.to_excel(file_path, index=False, sheet_name='Sheet1')
print("追加寫入完成")注意:這種方法本質(zhì)還是覆蓋寫入,只是先讀取舊數(shù)據(jù)再和新數(shù)據(jù)合并后一起寫入,適合小文件。
方法二:使用 openpyxl 直接追加(更高效,不會(huì)丟失原文件的其他工作表)
from openpyxl import load_workbook
file_path = '成績(jī)表.xlsx'
# 加載工作簿
try:
wb = load_workbook(file_path)
except FileNotFoundError:
wb = Workbook()
ws = wb.active
if ws.title != 'Sheet1':
ws.title = 'Sheet1'
# 追加數(shù)據(jù)(假設(shè)已有表頭,直接從下一行開始寫)
new_rows = [
['趙六', 88],
['小明', 95]
]
for row in new_rows:
ws.append(row)
wb.save(file_path)
print("追加寫入完成")2.2 在現(xiàn)有 Excel 文件中新增工作表(不影響原有工作表)
import pandas as pd
from openpyxl import load_workbook
file_path = '成績(jī)表.xlsx'
# 新數(shù)據(jù)
df_new_sheet = pd.DataFrame({'科目': ['數(shù)學(xué)', '語(yǔ)文', '英語(yǔ)'], '成績(jī)': [95, 88, 92]})
# 方法一:使用 pandas 的 ExcelWriter 添加新工作表
with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
df_new_sheet.to_excel(writer, sheet_name='其他科目', index=False)
print("已新增工作表")注意:mode='a' 表示追加模式,if_sheet_exists='replace' 表示如果同名工作表存在則替換。
三、總結(jié)
| 操作 | 推薦方法 | 特點(diǎn) |
|---|---|---|
| 覆蓋寫入 | pd.DataFrame.to_excel() 或 openpyxl.Workbook().save() | 最簡(jiǎn)單,直接替換原文件 |
| 追加行 | openpyxl 的 worksheet.append() | 不破壞原文件其他內(nèi)容,性能較好 |
| 新增工作表 | pd.ExcelWriter(mode='a') | 保留原有工作表,添加新的 Sheet |
| 完整追加(合并) | pd.concat() + to_excel() | 適合少量數(shù)據(jù),會(huì)重寫整個(gè)文件 |
如果需要頻繁大量的追加操作,推薦使用 openpyxl 直接操作工作簿,避免反復(fù)讀寫整個(gè)文件。
四、方法補(bǔ)充
下面是小編整理的其他python實(shí)現(xiàn)對(duì)excel的覆蓋追加操作的完整代碼,感興趣的可以了解下
from openpyxl import Workbook, load_workbook
# 定義文件名和工作表名
filename = r"C:\Users\Administrator\Downloads\example.xlsx"
# 第一次寫入(創(chuàng)建文件并寫入兩個(gè)sheet)
def first_write():
# 加載或創(chuàng)建新工作簿
try:
wb = load_workbook(filename)
except FileNotFoundError:
wb = Workbook()
wb.remove(wb.active)
# 檢查并刪除已存在的 "作者" 工作表(如果存在)
if "機(jī)構(gòu)" in wb.sheetnames:
del wb["機(jī)構(gòu)"]
sheet1 = wb.create_sheet("機(jī)構(gòu)")
for row in data1:
sheet1.append(row)
# 檢查并刪除已存在的 "作者" 工作表(覆蓋/新建sheet)
if "作者" in wb.sheetnames:
del wb["作者"]
sheet2 = wb.create_sheet("作者")
for row in data2:
sheet2.append(row)
wb.save(filename)
# 第二次寫入(追加sheet)
def second_write():
# 加載已存在的文件
wb = load_workbook(filename)
# 檢查 "作者" 工作表是否存在,如果存在則獲取它,否則創(chuàng)建一個(gè)新的
if "作者" in wb.sheetnames:
sheet2 = wb["作者"]
else:
sheet2 = wb.create_sheet("作者")
for row in data3:
sheet2.append(row)
wb.save(filename)
# 數(shù)據(jù)定義
data2 = [
['Header1', 'Header2', 'Header3'],
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
data1 = [
['Header11', 'Header12', 'Header13'],
[11, 2, 3],
[41, 5, 6],
[71, 8, 9]
]
data3 = [
[21, 2, 3],
[42, 5, 6],
[73, 8, 9]
]
# 執(zhí)行寫入操作
first_write() # 首次寫入
second_write() # 覆蓋寫入
到此這篇關(guān)于python實(shí)現(xiàn)對(duì)excel的覆蓋和追加操作的文章就介紹到這了,更多相關(guān)python excel覆蓋和追加內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)迷宮自動(dòng)尋路實(shí)例
大家好,本篇文章主要講的是Python實(shí)現(xiàn)迷宮自動(dòng)尋路實(shí)例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02
Python?ArcPy實(shí)現(xiàn)批量對(duì)大量遙感影像相減做差
這篇文章主要為大家介紹了如何基于Python中ArcPy模塊實(shí)現(xiàn)對(duì)大量柵格遙感影像文件批量進(jìn)行相減做差,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-06-06
淺談Python數(shù)學(xué)建模之線性規(guī)劃
線性規(guī)劃是運(yùn)籌學(xué)中研究較早、發(fā)展較快、應(yīng)用廣泛、方法較成熟的一個(gè)重要分支,它是輔助人們進(jìn)行科學(xué)管理的一種數(shù)學(xué)方法。研究線性約束條件下線性目標(biāo)函數(shù)的極值問題的數(shù)學(xué)理論和方法2021-06-06
keras自定義回調(diào)函數(shù)查看訓(xùn)練的loss和accuracy方式
這篇文章主要介紹了keras自定義回調(diào)函數(shù)查看訓(xùn)練的loss和accuracy方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python MySQL如何通過Binlog獲取變更記錄恢復(fù)數(shù)據(jù)
本文介紹了如何使用Python和pymysqlreplication庫(kù)通過MySQL的二進(jìn)制日志(Binlog)獲取數(shù)據(jù)庫(kù)的變更記錄,并展示了一個(gè)簡(jiǎn)單的Python腳本,該腳本讀取Binlog事件并打印出插入、更新和刪除操作的SQL語(yǔ)句,此外,還提到可以使用pandas將結(jié)果輸出到Excel表格中進(jìn)行數(shù)據(jù)分析處理2025-01-01
使用Python從Excel文件中自動(dòng)提取圖片的全過程
在日常數(shù)據(jù)處理工作中,我們常常需要面對(duì)包含大量圖片的Excel文件,無論是產(chǎn)品目錄、員工檔案還是資產(chǎn)清單,這些圖片往往承載著重要的視覺信息,所以本文將深入探討如何使用Python與spire.xls for python庫(kù),為您提供一個(gè)詳細(xì)、可操作的Excel圖片提取教程2026-02-02
如何使用pyinstaller打包時(shí)引入自己編寫的庫(kù)
這篇文章主要介紹了如何使用pyinstaller打包時(shí)引入自己編寫的庫(kù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Pytorch distributed 多卡并行載入模型操作
這篇文章主要介紹了Pytorch distributed 多卡并行載入模型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

