用 Python 读写 Excel 表格,就是这么的简单粗暴且乏味
過去,在很多金融、市場、行政的招聘中,面試官都會問一句:“你精通 EXCEL 嗎?”
但今天,他們可能更喜歡問:“你會 Python 嗎?”
越來越多的企業開始用 Python 處理數據,特別是金融、證券、商業、互聯網等領域。在頂級公司的高端職位中,Python 更是成為了標配:
Python?究竟有什么法力能讓大家如此青睞?
舉個例子:在過去,如果老板想要獲取 A 股所有股票近 2 年的數據,你可能需要?登錄-查詢-下載-記錄到excel?循環 500 多次,即使你是一個沒有感情的復制機器人,也需要一兩天的時間。
但如果你掌握了 Python,只需要寫個腳本,**泡杯咖啡的功夫?**數據就全部下載好了。
再加上 Python 強大的繪圖功能,你可以一次性完成?數據收集 — 整理?—?分析?— 繪圖的過程,直接把分析結果用圖表呈現出來。
今天本篇文章,我們就總結了一下利用 python 操作 Excel 文件的第三方庫和方法。
內容出自課程——《OpenPyXL 處理 Excel 基礎入門》,歡迎大家來實驗邊敲代碼邊學習~
首先,我們來學習一下,如何?用 Python 創建和保存 Excel 文檔。
對于經常與數據打交道的人來說,Excel 是經常使用的工具;對于與數據打交道的程序員來說,OpenPyXL 庫是一個利器。Python 官方提供了這樣一個庫,讓我們可以直接通過 Python 代碼實現對 Excel 文件的操作,操作文件格式包括 xlsx、xlsm、xltx、xltm。
知識點
- 創建/打開工作簿
- 訪問工作表單元及其值
- 保存工作表
讓我們先來學習簡單的創建和保存功能。
創建/打開工作簿
首先,下載實驗所需?shiyanlou.xlsx?示例文件,同時安裝指定版本的 openpyxl 庫。
!wget -nc "https://labfile.oss.aliyuncs.com/courses/1585/shiyanlou.xlsx" !pip install openpyxl==3.0.3使用 openpyxl 不需要在文件系統上創建文件,只需導入?Workbook?類并開始工作:
教學代碼:
from openpyxl import Workbookwb = Workbook() # 實例化一個工作簿對象print(wb)也可以打開本地已有的工作簿進行實驗操作:
from openpyxl import load_workbookwb = load_workbook(filename='shiyanlou.xlsx')print(wb)load_workbook?中可以使用以下幾個參數:
- data_only:帶有公式的單元格是否具有公式(默認具有)或上一次 Excel 讀取工作表時存儲的值。
- keep_vba:設置是否保留任何 Visual Basic 元素(默認保留),可選擇保留但是不支持編輯。
工作簿創建時總是會默認創建一個名為 Sheet 工作表,可以通過使用Workbook.active?屬性獲取:
ws = wb.active # 獲取當前活躍的工作表 print(ws)也可以通過?Workbook.create_sheet()?創建工作表并命名,若不設置名字參數則默認命名為 sheet,sheet1,sheet2…創建的工作表位置默認總是插入到最后:
ws = wb.create_sheet() # sheet ws1 = wb.create_sheet("Mysheet") # 命名為 Mysheet ws2 = wb.create_sheet("Mysheet1", 0) # 新建 Mysheet1 工作表插入到第一個位置 ws3 = wb.create_sheet("Mysheet2", -1) # 新建 Mysheet2 工作表插入到倒數第二個的位置 ws.title = "shiyanlou" # 將上述 ws 工作表重命名為 shiyanlouprint("Success")默認情況下,工作表的標簽背景顏色為白色。我們可以通過Worksheet.sheet_properties.tabColor?屬性改變顏色:
ws.sheet_properties.tabColor = "1072BA" # RGB 格式 print(ws.sheet_properties.tabColor)我們給工作表取名后,可以把它作為該工作簿的一個鍵,簡化后續代碼,例如:
ws = wb["shiyanlou"] print(ws)若想查看該工作簿下的所有工作表,可以通過函數?Workbook.sheetname:
print(wb.sheetnames)也可以通過迭代的方式打印所有工作表
for sheet in wb:print(sheet.title)我們可以通過?Workbook.copy_worksheet()?方法在單個工作簿中創建工作表的副本:
source = wb.active # 獲取活躍的工作表 target = wb.copy_worksheet(source) # 上述獲取的工作表為其創建副本print(target)訪問工作表單元及其值
前面我們已經知道了如何創建獲取工作簿及工作表,接下來我們將學習修改單元格的內容。以下操作基于?shiyanlou.xlsx?工作簿中的?shiyanlou?工作表進行。
單元格可以直接作為工作表的鍵進行訪問賦值,用?value?屬性進行值訪問:
c = ws['A4'] # 將訪問 A4 單元格 ws['A4'] = 4 # 對 A4 單元格進行賦值c.value # 訪問 A4 單元格的值,同 ws['A4'].value注意:在內存中創建工作表時,它不包含任何單元格,單元格都是在首次訪問時自動創建的。
以上代碼也可以通過更簡便的代碼實現:
d = ws.cell(row=4, column=2, value=10) # B4 進行賦值ws['B4'].value # 訪問單元格的值訪問多個單元格
可以使用切片訪問范圍為 A1 到 C2 的所有單元格:
cell_range行或列的范圍可以類似地獲得:
# 訪問列 colC = ws['C'] col_range = ws['C:D']# 訪問行 row10 = ws[10] row_range = ws[5:10]print(col_range, row_range)也可以使用?Worksheet.iter_rows()?返回行:
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):for cell_row in row:print(cell_row)使用?Worksheet.iter_cols()?返回列:
for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):for cell_col in col:print(cell_col)如果需要遍歷工作表的所有行或列,則可以使用?Worksheet.rows?屬性。出于性能原因,該屬性在只讀模式下不可用:
ws['C9'] = 'hello world' tuple(ws.rows)或者使用?Worksheet.columns?屬性。出于性能原因,該屬性在只讀模式下不可用:
tuple(ws.columns)訪問值
如果只需要工作表中的值,則可以使用該?Worksheet.values?屬性。遍歷工作表中的所有行,但僅返回單元格值:
for row in ws.values:for value in row:print(value)Worksheet.iter_rows()?和?Worksheet.iter_cols()?可以用?values_only?參數,只返回單元格的值:
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):print(row)保存工作表
將我們之前創建的工作簿保存格式為 xlsx 的文件,若已存在則覆蓋:
wb.save("shiyanlou.xlsx")篇幅有限,后續的課程內容,請在《OpenPyXL 處理 Excel 基礎入門》中敲代碼邊學習~
總結
以上是生活随笔為你收集整理的用 Python 读写 Excel 表格,就是这么的简单粗暴且乏味的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端教程丨手把手教你用 Next.js
- 下一篇: 搞机器学习需要数学基础吗?