過去,在很多金融、市場、行政的招聘中,面試官都會問一句:“你精通 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 Workbook
wb = Workbook() # 實體化一個作業簿物件
print(wb)
也可以打開本地已有的作業簿進行實驗操作:
from openpyxl import load_workbook
wb = 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 作業表重命名為 shiyanlou
print("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=https://www.cnblogs.com/shiyanlou/p/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 基礎入門》中敲代碼邊學習~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/141434.html
標籤:Python
下一篇:python九九乘法表程式代碼
