Python 讀寫 Excel文件 總結
最近接連幫同學處理Excel表格,他們的出發點就是,數據項太多導致手動處理工作量太大了,尋求能不能用軟件自動化處理的辦法。其實利用Python編寫十行左右代碼就能解決相應的重復簡單的工作,由於我總是記不清相關庫,在這里詳細總結各種庫和函數接口以方便自己查閱和幫助大家高效完成工作。
Excel是什么
我們常用的Excel是由微軟開發的電子表格辦公軟件,其所創建的文件顯示為一系列行與列組成的網格。
Excel文件的后綴名通常有以下幾種形式:
- xlsx Excel2007 - 目前最新版默認的文件格式,不能有宏
- xls Excel97 - 2003版的文件格式,可以有宏
- csv 以逗號分隔的文本文件(Comma-Separated Values)
在Excel中還能以純文本形式(使用Tab分隔)或PDF格式保存,這種存儲格式會導致表格數據失去通用性,在此不作說明。
xlrd模塊讀Excel
xlrd是一個讀取Excel文件的Python模塊(A Python module for extracting data from MS Excel (TM) spreadsheet files.)
首先要掌握的是open_workbook
方法,查看源碼可見其參數非常復雜,通常只需要傳入文件名參數即可,返回一個Book
對象。
filename = 'myfile.xls'
readxls = xlrd.open_workbook(filename)
Excel打開后可能會有多個電子表(sheet),成員方法sheets
返回打開的book內全部電子表組成的列表。
獲取第一個電子表
sheet1 = readxls.sheets()[0]
# sheet_by_index 按下標返回電子表
# sheet1 = readxls.sheet_by_index(0)
# sheet_by_name 按表名返回電子表
# sheet1 = readxls.sheet_by_name('Sheet1')
對電子表遍歷
# 獲取電子表行數
nrows = sheet1.nrows
ncols = sheet1.ncols
# 按行遍歷
for i in range(nrows):
# rowList為字符串組成的列表
rowList = sheet1.row_values(i)
# 按列遍歷
for i in range(ncols):
colList = sheet1.col_values(i)
xlwt模塊寫Excel
一般處理Excel表格需要對Excel內的數據進行修改整理,前面的wlrd模塊只完成的讀的操作,若要實現對數據項的修改,這里采取引入xlwt模塊,新建Excel完成寫入的操作。
# 創建一個Workbook對象,用於保存工作表
workbook = xlwt.Workbook()
# 添加電子表
sheet1 = workbook.add_sheet('Sheet1')
# 以二維表格形式存入數據
# 乘法口訣表
rows = 9
cols = 9
for i in range(rows):
for j in range(cols):
if i<=j:
sheet1.write(j, i, '%d x %d = %d'%(i+1, j+1, (i+1)*(j+1)))
# 保存工作表
workbook.save('out.xls')
運行結果
csv模塊讀寫csv文件
對於特殊的csv文件格式,直接引入Python自帶的csv模塊處理會更方便。
讀文件
import csv
with open(filename) as f:
data = csv.reader(f)
# 按行讀取文件
for row in data:
pass
寫文件
首先創建一個writer對象
csv_writer = csv.writer(filename)
寫文件實例
import csv
headers = ['id','name','age']
rows = [
[1, 'zong', 23],
[2, 'xxx', 22],
[3, 'izcat', -1],
[4, 'helloworld', 0]]
with open('out.csv','w', newline='') as f:
# 創建一個writer對象
csv_writer = csv.writer(f)
# writerow寫入一行
csv_writer.writerow(headers)
# writerows寫入多行
csv_writer.writerows(rows)
保存的文件以文本形式打開時,顯示內容為逗號分隔的純文本字符;用Excel軟件打開則顯示為正常的電子表格。
pandas庫讀Excel
對於需要做數值處理,特別是有關矩陣、向量等數值計算,不妨使用pandas庫來讀入Excel中的數據。
示例
import pandas as pd
filename = "data.xls"
# header=0 第一行為列名
# header=None 第一行沒有列名,為數據
data = pd.read_excel(filename, header=None)
# 二維表格的列數和行數
m, n = data.shape
# 數據歸一化處理
data = (data-data.min()) / (data.max()-data.min())
# 轉化為矩陣 方便以矩陣形式的數值計算
data = data.as_matrix(columns=None)
(待完善)