原标题:教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!
来自:掘金,作者:奈何缘浅wyj
Python 操作 Excel
常用工具
数据处理是 Python 的一大应用场景,而 Excel 又是当前最流行的数据处理软件。因此用 Python 进行数据处理时,很容易会和 Excel 打起交道。得益于前人的辛勤劳作,Python 处理 Excel 已有很多现成的轮子,比如xlrd & xlwt & xlutils、XlsxWriter、OpenPyXL,而在 Windows 平台上可以直接调用 Microsoft Excel 的开放接口,这些都是比较常用的工具,还有其他一些优秀的工具这里就不一一介绍,接下来我们通过一个表格展示各工具之间的特点:
类型
xlrd&xlwt&xlutils
XlsxWriter
OpenPyXL
Excel开放接口
读取
支持
不支持
支持
支持
写入
支持
支持
支持
支持
修改
支持
不支持
支持
支持
xls
支持
不支持
不支持
支持
xlsx
高版本
支持
支持
支持
大文件
不支持
支持
支持
不支持
效率
快
快
快
超慢
功能
较弱
强大
一般
超强大
以上可以根据需求不同,选择合适的工具,现在为大家主要介绍下最常用的 xlrd & xlwt & xlutils 系列工具的使用。
xlrd & xlwt & xlutils 介绍
xlrd&xlwt&xlutils 是由以下三个库组成:
xlrd:用于读取 Excel 文件;
xlwt:用于写入 Excel 文件;
xlutils:用于操作 Excel 文件的实用工具,比如复制、分割、筛选等;
安装库
安装比较简单,直接用 pip 工具安装三个库即可,安装命令如下:
$ pip install xlrd xlwt xlutils
写入 Excel
接下来我们就从写入 Excel 开始,话不多说直接看代码如下:
# 导入 xlwt 库
import xlwt
# 创建 xls 文件对象
wb = xlwt.Workbook
# 新增两个表单页
sh1 = wb.add_sheet( '成绩')
sh2 = wb.add_sheet( '汇总')
# 然后按照位置来添加数据,第一个参数是行,第二个参数是列
# 写入第一个sheet
sh1.write(0, 0, '姓名')
sh1.write(0, 1, '专业')
sh1.write(0, 2, '科目')
sh1.write(0, 3, '成绩')
sh1.write(1, 0, '张三')
sh1.write(1, 1, '信息与通信工程')
sh1.write(1, 2, '数值分析')
sh1.write(1, 3, 88)
sh1.write(2, 0, '李四')
sh1.write(2, 1, '物联网工程')
sh1.write(2, 2, '数字信号处理分析')
sh1.write(2, 3, 95)
sh1.write(3, 0, '王华')
sh1.write(3, 1, '电子与通信工程')
sh1.write(3, 2, '模糊数学')
sh1.write(3, 3, 90)
# 写入第二个sheet
sh2.write(0, 0, '总分')
sh2.write(1, 0, 273)
# 最后保存文件即可
wb.save( 'test.xls')
运行代码,结果会看到生成名为 test.xls 的 Excel 文件,打开文件查看如下图所示:
以上就是写入 Excel 的代码,是不是很简单,下面我们再来看下读取 Excel 该如何操作。
读取 Excel
读取 Excel 其实也不难,请看如下代码:
# 导入 xlrd 库
import xlrd
# 打开刚才我们写入的 test_w.xls 文件
wb = xlrd.open_workbook( "test_w.xls")
# 获取并打印 sheet 数量
print( "sheet 数量:", wb.nsheets)
# 获取并打印 sheet 名称
print( "sheet 名称:", wb.sheet_names)
# 根据 sheet 索引获取内容
sh1 = wb.sheet_by_index(0)
# 或者
# 也可根据 sheet 名称获取内容
# sh = wb.sheet_by_name('成绩')
# 获取并打印该 sheet 行数和列数
print( u "sheet %s 共 %d 行 %d 列"% (sh1.name, sh1.nrows, sh1.ncols))
# 获取并打印某个单元格的值
print( "第一行第二列的值为:", sh1.cell_value(0, 1))
# 获取整行或整列的值
rows = sh1.row_values(0) # 获取第一行内容
cols = sh1.col_values(1) # 获取第二列内容
# 打印获取的行列值
print( "第一行的值为:", rows)
print( "第二列的值为:", cols)
# 获取单元格内容的数据类型
print( "第二行第一列的值类型为:", sh1.cell(1, 0).ctype)
# 遍历所有表单内容
forsh inwb.sheets:
forr inrange(sh.nrows):
# 输出指定行
print( sh.row(r))
输出如下结果:
细心的朋友可能注意到,这里我们可以获取到 单元格的类型,上面我们读取类型时获取的是数字1,那1表示什么类型,又都有什么类型呢?别急下面我们通过一个表格展示下:
数值
类型
说明
0
empty
空</