xlsxwriter
xlrd:用于讀取 Excel 文件;xlwt:用于寫(xiě)入 Excel 文件;xlutils:用于操作 Excel 文件的實(shí)用工具,比如復(fù)制、分割、篩選等;
https://xlsxwriter.readthedocs.io/
寫(xiě)入大.xlsx文件時(shí)使用內(nèi)存優(yōu)化模式。pandas
http://pandas.pydata.org/
pandas支持.xls,.xlsx文件的讀寫(xiě)。openpyxl
openpyxl是一個(gè)用于讀取和編寫(xiě)Excel 2010之后的 xlsx/xlsm/xltx/xltm文件的庫(kù)。
https://openpyxl.readthedocs.io/en/stable/
1、加載大.xlsx文件可以使用read_only模式。
2、寫(xiě)入大.xlsx文件可以使用write_only模式。
| 類型 | xlrd&xlwt&xlutils | pandas | OpenPyXL |
|---|---|---|---|
| 讀取 | 支持 | 支持 | 支持 |
| 寫(xiě)入 | 支持 | 支持 | 支持 |
| 修改 | 支持 | 支持 | 支持 |
| xls | 支持 | 支持 | 不支持 |
| xlsx | 高版本支持 | 支持 | 支持 |
| 大文件 | 不支持 | 支持 | 支持 |
| 效率 | 快 | 快 | 快 |
| 功能 | 較弱 | 強(qiáng)大 | 一般 |
| 速度 | 最快 | 慢 | 較快 |
import xlsxwriter as xw
import pandas as pd
import openpyxl as op
def get_data():
orderIds = [1, 2, 3]
items = ['A', 'B', 'C']
myData = ["風(fēng)犬少年的天空", "重啟", "半澤直樹(shù)"]
testData = [orderIds, items, myData]
return testData
# filename2 = '測(cè)試2.xlsx'
# filename3 = '測(cè)試3.xlsx'
# xlsxwriter 一行一行寫(xiě)
def xw_toexcel(data, file_name):
""" 通過(guò) xlsxwriter 方式 """
# 創(chuàng)建工作簿
workbook = xw.Workbook(file_name)
# 創(chuàng)建子表
worksheet = workbook.add_worksheet("sheet")
# 激活表
worksheet.activate()
# 設(shè)置表頭
title = ['序號(hào)', '等級(jí)', '名稱']
# 從A1單元格開(kāi)始寫(xiě)入表頭
worksheet.write_row('A1', title)
# 從第二行開(kāi)始寫(xiě)入數(shù)據(jù)
i = 2
for j in range(len(data)):
insertData = [data[0][j], data[1][j], data[2][j]]
row = 'A' + str(i)
worksheet.write_row(row, insertData)
i += 1
# 關(guān)閉表
workbook.close()
def pd_toexcel(data, file_name):
""" pandas方式 """
# 用字典設(shè)置DataFrame所需數(shù)據(jù)
dfData = {
'序號(hào)': data[0],
'等級(jí)': data[1],
'名稱': data[2]
}
# 創(chuàng)建DataFrame
df = pd.DataFrame(dfData)
# 存表,去除原始索引列(0,1,2...)
df.to_excel(file_name, index=False)
def op_toexcel(data, file_name):
""" openpyxl方式 """
# 創(chuàng)建工作簿對(duì)象
wb = op.Workbook()
# 創(chuàng)建子表
ws = wb['Sheet']
# 添加表頭
ws.append(['序號(hào)', '等級(jí)', '名稱'])
for i in range(len(data[0])):
d = data[0][i], data[1][i], data[2][i]
# 每次寫(xiě)入一行
ws.append(d)
wb.save(file_name)
def main():
# xw_toexcel(get_data(), '測(cè)試1.xlsx')
# pd_toexcel(get_data(), '測(cè)試2.xlsx')
op_toexcel(get_data(), '測(cè)試3.xlsx')
if __name__ == '__main__':
main()