讀入 Excel 文件(簡單格式)
import?pandas?as?pd
dict_xl =?pd.read_excel('data.xlsx',sheet_name=None,engine='openpyxl')
df_xl =?pd.read_excel('data.xlsx',sheet_name='sheet1',engine='openpyxl')
調(diào)用 pandas 的 read_excel() 讀入;
sheet_name 參數(shù)若等于 None,則讀入整個文件所有的 sheet, 數(shù)據(jù)格式為字典,key 為各個 sheet 的名稱,內(nèi)容為 dataframe 格式;
sheet_name 參數(shù)若等于其中某個 sheet 名稱,則讀入單個 sheet, 數(shù)據(jù)格式為 dataframe;
engine='openpyxl',指定使用 openpyxl 庫進行讀寫,同時支持 .xls 和 .xlsx 格式。
讀入 CSV 文件
df_csv =?pd.read_csv("data.csv")??
與 excel 類似,默認(rèn)第一行為表頭列名。
寫入 Excel 文件(簡單格式)
import?pandas?as?pd
writer?=?pd.ExcelWriter('result.xlsx')
df_data.to_excel(writer)
writer.save()
調(diào)用 pandas 將 dataframe 保存為 excel 文件,簡單格式,數(shù)據(jù)校驗、透視表等附加信息會丟失。
讀寫 Excel 文件(復(fù)雜格式)
import os
import?win32com.client
#?獲取excel進程
xlApp?=?win32com.client.Dispatch('Excel.Application')
#?直接覆蓋不提示
xlApp.DisplayAlerts?=?False
#?用xlApp打開xlsx?用于修改和寫入數(shù)據(jù)
path?=?os.path.dirname(os.path.abspath(__file__))
xlBook?=?xlApp.Workbooks.Open(path+'\data.xlsx',?ReadOnly?=?False)
# 獲取 sheet1
sheet?=?xlBook.Worksheets('sheet1')
# 單元格賦值
sheet.Cells(1,1) = '計算結(jié)果'
# 將 dataframe 數(shù)據(jù)一次性填充到 sheet 中指定范圍
sheet_Range(sheet.Cells(2,1),sheet.Cells(2 +?df.shape[0]-1,?_col+df.shape[1]-1)).Value?=?df.values
#保存
#?xlBook.Close(SaveChanges=1)????
xlBook.SaveAs(path+'\result.xlsx')
#?結(jié)束excel進程
xlApp.quit()
del?xlApp
win32com 本質(zhì)上調(diào)用本地 excel 進程,因此必須關(guān)閉所有當(dāng)前打開的 excel 窗口;
win32com 需要獲取到文件的絕對目錄,通常用 os.path 獲??;
xlApp 獲取到進程;xlBook 操作 excel 文件; sheet 操作單個 sheet; Cells 操作單元格; Range 操作單元格范圍;
xlBook.Close(SaveChanges=1) 將 workbook 保存到當(dāng)前文件;
xlBook.SaveAs(path+'\result.xlsx') 將 workbook 另存為新的文件;
win32com 操作 excel 文件的優(yōu)點是對數(shù)據(jù)驗證、透視表等附加信息無損,本質(zhì)上等同于 excel 自身操作;缺點是系統(tǒng)必須安裝 excel,速度慢,若程序出錯會遺留 EXCEL.exe 進程,下次運行前必須手動清除( taskkill /im excel.exe /F ),暫時未找到完美的事后處理方案。