excel in python
ofollow,noindex">python-excel 是一組用 python 實現的 excel 檔案訪問庫,包括xlrd 、xlwt 和xlutils 三個模組。這裡介紹一下它的基本用法,大約需要 10 分鐘閱讀。
安裝
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 |