Python例項篇:自動操作Excel檔案(既簡單又特別實用)
前言
大家平時在工作與學習中都會操作到Excel檔案格式,特別是很多資料的時候,靠人力去識別操作非常容易出錯。今天就帶大家用Python來處理Excel檔案,讓你成為一個別人眼中的秀兒~
工具
- python3.7
- Pycharm
- Excel
- xlwt&xlrd
讀取Excel檔案內容
當前資料夾下有一個名為“股票資料.xlsx”的Excel檔案,可以按照下列程式碼方式來操作它。
import xlrd
# 使用xlrd模組的open_workbook函式開啟指定Excel檔案並獲得Book物件(工作簿)
wb = xlrd.open_workbook('股票資料.xlsx')
# 通過Book物件的sheet_names方法可以獲取所有表單名稱
sheetname = wb.sheet_names()[0]
# 通過指定的表單名稱獲取Sheet物件(工作表)
sheet = wb.sheet_by_name(sheetname)
# 通過Sheet物件的nrows和ncols屬性獲取表單的行數和列數
print(sheet.nrows, sheet.ncols)
for row in range(sheet.nrows):
for col in range(sheet.ncols):
# 通過Sheet物件的cell方法獲取指定Cell物件(單元格)
# 通過Cell物件的value屬性獲取單元格中的值
value = sheet.cell(row, col).value
# 對除首行外的其他行進行資料格式化處理
if row > 0:
# 第1列的xldate型別先轉成元組再格式化為“年月日”的格式
if col == 0:
# xldate_as_tuple函式的第二個引數只有0和1兩個取值
# 其中0代表以1900-01-01為基準的日期,1代表以1904-01-01為基準的日期
value = xlrd.xldate_as_tuple(value, 0)
value = f'{<!-- -->value[0]}年{<!-- -->value[1]:>02d}月{<!-- -->value[2]:>02d}日'
# 其他列的number型別處理成小數點後保留兩位有效數字的浮點數
else:
value = f'{<!-- -->value:.2f}'
print(value, end='\t')
print()
# 獲取最後一個單元格的資料型別
# 0 - 空值,1 - 字串,2 - 數字,3 - 日期,4 - 布林,5 - 錯誤
last_cell_type = sheet.cell_type(sheet.nrows - 1, sheet.ncols - 1)
print(last_cell_type)
# 獲取第一行的值(列表)
print(sheet.row_values(0))
# 獲取指定行指定列範圍的資料(列表)
# 第一個引數代表行索引,第二個和第三個引數代表列的開始(含)和結束(不含)索引
print(sheet.row_slice(3, 0, 5))
寫入Excel檔案內容
Excel檔案寫入可以通過xlwt 模組的Workbook類建立工作簿物件,通過工作簿物件的add_sheet方法可以新增工作表,通過工作表物件的write方法可以向指定單元格中寫入資料,最後通過工作簿物件的save方法將工作簿寫入到指定的檔案或記憶體中。下面程式碼操作了一個學員成績表的寫入。
import random
import xlwt
student_names = ['關羽', '張飛', '趙雲', '馬超', '黃忠']
scores = [[random.randint(40, 100) for _ in range(3)] for _ in range(5)]
# 建立工作簿物件(Workbook)
wb = xlwt.Workbook()
# 建立工作表物件(Worksheet)
sheet = wb.add_sheet('一年級二班')
# 新增表頭資料
titles = ('姓名', '語文', '數學', '英語')
for index, title in enumerate(titles):
sheet.write(0, index, title)
# 將學生姓名和考試成績寫入單元格
for row in range(len(scores)):
sheet.write(row + 1, 0, student_names[row])
for col in range(len(scores[row])):
sheet.write(row + 1, col + 1, scores[row][col])
# 儲存Excel工作簿
wb.save('考試成績表.xlsx')
Excel檔案樣式調整
還可以通過XFStyle物件來設定單元格的不同樣式。主要包括字型(Font)、對齊方式(Alignment)、邊框(Border)和背景(Background)的設定。
header_style = xlwt.XFStyle()
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
# 0 - 黑色、1 - 白色、2 - 紅色、3 - 綠色、4 - 藍色、5 - 黃色、6 - 粉色、7 - 青色
pattern.pattern_fore_colour = 5
header_style.pattern = pattern
titles = ('姓名', '語文', '數學', '英語')
for index, title in enumerate(titles):
sheet.write(0, index, title, header_style)
設定表頭的位置
align = xlwt.Alignment()
# 垂直方向的對齊方式
align.vert = xlwt.Alignment.VERT_CENTER
# 水平方向的對齊方式
align.horz = xlwt.Alignment.HORZ_CENTER
header_style.alignment = align
設定單元格的寬高
# 設定行高為40px
sheet.row(0).set_style(xlwt.easyxf(f'font:height {<!-- -->20 * 40}'))
titles = ('姓名', '語文', '數學', '英語')
for index, title in enumerate(titles):
# 設定列寬為200px
sheet.col(index).width = 20 * 200
# 設定單元格的資料和樣式
sheet.write(0, index, title, header_style)
總結
其他操作Excel檔案的三方庫(如openpyxl)大家有興趣可以自行了解。掌握了Python程式操作Excel的方法,可以解決日常辦公中很多繁瑣的處理Excel電子表格工作,最常見就是將多個數據格式相同的Excel檔案合併到一個檔案以及從多個Excel檔案或表單中提取指定的資料。當然,如果要對錶格資料進行處理,使用Python資料分析神器之一的pandas庫可能更為方便,因為pandas庫封裝的函式以及DataFrame類可以完成大多數資料處理的任務。
以上就是本次分享的所有內容,想要了解更多 python 知識歡迎前往公眾號:Python 程式設計學習圈,每日干貨分享
「其他文章」
- 位元組一面:Redis主節點宕機,如何處理?
- 如何使用 Redis 實現 “附近的人” 這個功能?
- 介紹一款能取代 Scrapy 的爬蟲框架 - feapder
- 直觀講解一下 RPC 呼叫和 HTTP 呼叫的區別!
- MySQL 億級資料分頁的優化
- Python 多執行緒小技巧:比 time.sleep 更好用的暫停寫法!
- Python面試官:請說說併發場景鎖怎麼用?
- Python如何非同步傳送日誌到遠端伺服器?
- Python 中的數字到底是什麼?
- 如何建立一個完美的 Python 專案?
- 詳解 Python 的二元算術運算,為什麼說減法只是語法糖?
- Python 為什麼沒有 main 函式?為什麼我不推薦寫 main 函式?
- Bug分析,假刪除導致文章釋出成功卻打不開的問題
- Python 進階:queue 佇列原始碼分析
- Python例項篇:自動操作Excel檔案(既簡單又特別實用)
- 誰說程式設計師不懂浪漫,當代碼遇到文學..
- Python 為什麼沒有 void 關鍵字?
- 程式語言中分號“;”的簡明歷史
- Python 什麼情況下會生成 pyc 檔案?
- 函式和方法的裝飾器