介绍
https://github.com/python-excel 是一组用 python 实现的 Excel 文件访问库, 包括 https://github.com/python-excel/xlrd , https://github.com/python-excel/xlwt 和 https://github.com/python-excel/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 文档在这里 https://xlrd.readthedocs.io/en/latest/index.html# .
写文件
写文件的示例代码如下:
- # -*- 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 文档在这里 https://xlwt.readthedocs.io/en/latest/index.html# .
过滤文件示例
下面这个过滤文件的示例, 是 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 的使用, 留在以后分享.
代码中有可以改进的地方, 还请各位大牛多多留言, 谢谢.
来源: https://juejin.im/post/5bce92716fb9a05cf52b006c