python 讀寫 excel

空空古城發表於2018-10-25

介紹

python-excel 是一組用 python 實現的 excel 檔案訪問庫, 包括 xlrdxlwtxlutils 三個模組。 這裡介紹一下它的基本用法,大約需要 15 分鐘閱讀。

安裝

mac 上的安裝命令

sudo pip install xlrd
sudo pip install xlwt
sudo pip install xlutils
複製程式碼

擴充套件:其他的安裝方式參見這裡

讀檔案

讀檔案示例程式碼如下:

# -*- coding: utf-8 -*- 

import sys  
reload(sys)  
sys.setdefaultencoding('utf8')  
import xlrd

def read_file(file_path):
	book = xlrd.open_workbook(file_path) #得到 Excel 檔案的 book 物件,例項化物件
	sheet = book.sheet_by_index(0) # 通過 sheet 索引獲得 sheet 物件
	ncols = sheet.ncols # 列數
	nrows = sheet.nrows # 行數
	print("row count:{:d}, column count:{:d}".format(nrows, ncols))
	for row in range(nrows):
		print(sheet.row_values(row))

if __name__ == '__main__':
	read_file("test.xls")
複製程式碼

當然也可以逐個 cell 地讀取檔案,程式碼如下:

# -*- coding: utf-8 -*- 

from __future__ import print_function
import sys  
reload(sys)  
sys.setdefaultencoding('utf8')  
import xlrd

def read_file(file_path):
	book = xlrd.open_workbook(file_path)
	sheet = book.sheet_by_index(0)
	ncols = sheet.ncols
	nrows = sheet.nrows
	for row in range(nrows):
		for col in range(ncols):
			print(sheet.cell_value(row, col), end='')
			print('\t', end='')
		print("")

if __name__ == '__main__':
	read_file("test.xls")
複製程式碼

擴充套件:xlrd 的 Api 文件在這裡

寫檔案

寫檔案的示例程式碼如下:

# -*- coding: utf-8 -*- 
import sys  
reload(sys)  
sys.setdefaultencoding('utf8')  
import xlwt

def get_data():
	data = []
	data.append(["id", "value"])
	for i in range(10):
		col_data = []
		col_data.append(i)
		col_data.append(i * 10)
		data.append(col_data)
	return data

def write_file(file_path, sheet_name, data):
	book = xlwt.Workbook(encoding = 'utf-8')
	sheet = book.add_sheet(sheet_name)
	row = 0
	for row_data in data:
		col = 0
		for cell_data in row_data:
			sheet.write(row, col, cell_data)
			col += 1
		row += 1
	book.save(file_path)

if __name__ == '__main__':
	data = get_data()
	write_file("test.xls", "test sheet", data)
複製程式碼

擴充套件:xlwt 的 Api 文件在這裡

過濾檔案示例

下面這個過濾檔案的示例,是 excel 檔案讀寫的綜合應用:

# -*- coding: utf-8 -*- 

import sys  
reload(sys)  
sys.setdefaultencoding('utf8')  
import xlrd
import xlwt

# 過濾掉第二列元素等於 keyword 的資料所在行
def filter_file(src_file, src_sheet_name, desc_file, desc_sheet_name, keyword):
	src_book = xlrd.open_workbook(src_file)
	src_sheet = src_book.sheet_by_name(src_sheet_name)

	desc_book = xlwt.Workbook(encoding = 'utf-8')
	desc_sheet = desc_book.add_sheet(desc_sheet_name)

	ncols = src_sheet.ncols
	nrows = src_sheet.nrows
	index = 0
	for row in range(nrows):
		content = src_sheet.cell_value(row, 1)
		if content == keyword:
			continue
		for col in range(ncols):
			desc_sheet.write(index, col, src_sheet.cell_value(row, col))
		index += 1

	desc_book.save(desc_file)	

if __name__ == '__main__':
	filter_file("test.xls", "test sheet", "test_desc.xls", "test sheet", 30)
複製程式碼

上述例子中的 test.xls 檔案內容為:

id value
0 0
1 10
3 30
2 20
4 40
5 50
6 60
7 70
8 80
9 90

高階用法

xlutils 的使用,留在以後分享。

相關文章