社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
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 是由以下三个库组成:
安装库
安装比较简单,直接用 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)
- # 遍历所有表单内容
- for sh in wb.sheets():
- for r in range(sh.nrows):
- # 输出指定行
- print( sh.row(r))
输出如下结果:
细心的朋友可能注意到,这里我们可以获取到单元格的类型,上面我们读取类型时获取的是数字1,那1表示什么类型,又都有什么类型呢?别急下面我们通过一个表格展示下:
数值 | 类型 | 说明 |
---|---|---|
0 | empty | 空 |
1 | string | 字符串 |
2 | number | 数字 |
3 | date | 日期 |
4 | boolean | 布尔值 |
5 | error | 错误 |
通过上面表格,我们可以知道刚获取单元格类型返回的数字1对应的就是字符串类型。
修改 excel
上面说了写入和读取 Excel 内容,接下来我们就说下更新修改 Excel 该如何操作,修改时就需要用到 xlutils 中的方法了。直接上代码,来看下最简单的修改操作:
- # 导入相应模块
- import xlrd
- from xlutils.copy import copy
- # 打开 excel 文件
- readbook = xlrd.open_workbook("test_w.xls")
- # 复制一份
- wb = copy(readbook)
- # 选取第一个表单
- sh1 = wb.get_sheet(0)
- # 在第五行新增写入数据
- sh1.write(4, 0, '王欢')
- sh1.write(4, 1, '通信工程')
- sh1.write(4, 2, '机器学习')
- sh1.write(4, 3, 89)
- # 选取第二个表单
- sh1 = wb.get_sheet(1)
- # 替换总成绩数据
- sh1.write(1, 0, 362)
- # 保存
- wb.save('test.xls')
从上面代码可以看出,这里的修改 Excel 是通过 xlutils 库的 copy 方法将原来的 Excel 整个复制一份,然后再做修改操作,最后再保存。看下修改结果如下:
格式转换操作
在平时我们使用 Excel 时会对数据进行一下格式化,或者样式设置,在这里把上面介绍写入的代码简单修改下,使输出的格式稍微改变一下,代码如下:
- # 导入 xlwt 库
- import xlwt
- # 设置写出格式字体红色加粗
- styleBR = xlwt.easyxf('font: name Times New Roman, color-index red, bold on')
- # 设置数字型格式为小数点后保留两位
- styleNum = xlwt.easyxf(num_format_str='#,##0.00')
- # 设置日期型格式显示为YYYY-MM-DD
- styleDate = xlwt.easyxf(num_format_str='YYYY-MM-DD')
- # 创建 xls 文件对象
- wb = xlwt.Workbook()
- # 新增两个表单页
- sh1 = wb.add_sheet('成绩')
- sh2 = wb.add_sheet('汇总')
- # 然后按照位置来添加数据,第一个参数是行,第二个参数是列
- sh1.write(0, 0, '姓名', styleBR) # 设置表头字体为红色加粗
- sh1.write(0, 1, '日期', styleBR) # 设置表头字体为红色加粗
- sh1.write(0, 2, '成绩', styleBR) # 设置表头字体为红色加粗
- # 插入数据
- sh1.write(1, 0, '张三',)
- sh1.write(1, 1, '2020-07-01', styleDate)
- sh1.write(1, 2, 90, styleNum)
- sh1.write(2, 0, '李四')
- sh1.write(2, 1, '2020-08-02')
- sh1.write(2, 2, 95, styleNum)
- # 设置单元格内容居中的格式
- alignment = xlwt.Alignment()
- alignment.horz = xlwt.Alignment.HORZ_CENTER
- style = xlwt.XFStyle()
- style.alignment = alignment
- # 合并A4,B4单元格,并将内容设置为居中
- sh1.write_merge(3, 3, 0, 1, '总分', style)
- # 通过公式,计算C2+C3单元格的和
- sh1.write(3, 2, xlwt.Formula("C2+C3"))
- # 对 sheet2 写入数据
- sh2.write(0, 0, '总分', styleBR)
- sh2.write(1, 0, 185)
- # 最后保存文件即可
- wb.save('test.xls')
输出结果:
可以看出,使用代码我们可以对字体,颜色、对齐、合并等平时 Excel 的操作进行设置,也可以格式化日期和数字类型的数据。当然了这里只是介绍了部分功能,不过这已经足够我们日常使用了,想了解更多功能操作可以参考官网。
python-excel官网:www.python-excel.org/
Python 操作 Word
安装 python-docx
处理 Word 需要用到 python-docx 库,目前版本为 0.8.10 ,执行如下安装命令:
- $ pip install python-docx
- ################# 运行结果 ################
- C:UsersY>pip install python-docx
- Looking in indexes: https://pypi.doubanio.com/simple
- Collecting python-docx
- Downloading https://pypi.doubanio.com/packages/e4/83/c66a1934ed5ed8ab1dbb9931f1779079f8bca0f6bbc5793c06c4b5e7d671/python-docx-0.8.10.tar.gz (5.5MB)
- || 5.5MB 3.2MB/s
- Requirement already satisfied: lxml>=2.3.2 in c:usersyappdatalocalprogramspythonpython37libsite-packages (from python-docx) (4.5.0)
- Building wheels for collected packages: python-docx
- Building wheel for python-docx (setup.py) ... done
- Created wheel for python-docx: filename=python_docx-0.8.10-cp37-none-any.whl size=184496 sha256=7ac76d3eec848a255b4f197d07e7b78ab33598c814d536d9b3c90b5a3e2a57fb
- Stored in directory: C:UsersYAppDataLocalpipCachewheels 57d71bb534b75918095724d0342119154c3d0fc035cedfe2f6c9a6c
- Successfully built python-docx
- Installing collected packages: python-docx
- Successfully installed python-docx-0.8.10
- 复制代码
OK,如果提示以上信息则安装成功。
写入 Word
平时我们在操作 Word 写文档的时候,一般分为几部分:标题、章节、段落、图片、表格、引用以及项目符号编号等。下面我们就按这几部分如何用 Python 操作来一一介绍。
标题
文档标题创建比较简单,通过 Document() 创建出一个空白文档,只要调用 add_heading 方法就能创建标题。
- # 导入库
- from docx import Document
- from docx.shared import Pt
- from docx.shared import Inches
- from docx.oxml.ns import qn
- # 新建空白文档
- doc1 = Document()
- # 新增文档标题
- doc1.add_heading('如何使用 Python 创建和操作 Word',0)
- # 保存文件
- doc1.save('word1.docx')
这样就完成了创建文档和文章标题的操作,下面运行程序,会生成名为 word1.docx 的文档,打开文章显示如下图所示:
章节与段落
有了文章标题,下面我们来看章节和段落是怎么操作的,在上面代码后面增加章节和段落操作的代码如下:
- # 导入库
- from docx import Document
- from docx.shared import Pt
- from docx.shared import Inches
- from docx.oxml.ns import qn
- # 新建空白文档
- doc1 = Document()
- # 新增文档标题
- doc1.add_heading('如何使用 Python 创建和操作 Word',0)
- # 创建段落描述
- doc1.add_paragraph(' Word 文档在我们现在的生活和工作中都用的比较多,我们平时都使用 wps 或者 office 来对 Word 进行处理,可能没想过它可以用 Python 生成,下面我们就介绍具体如何操作……')
- # 创建一级标题
- doc1.add_heading('安装 python-docx 库',1)
- # 创建段落描述
- doc1.add_paragraph('现在开始我们来介绍如何安装 python-docx 库,具体需要以下两步操作:')
- # 创建二级标题
- doc1.add_heading('第一步:安装 Python',2)
- # 创建段落描述
- doc1.add_paragraph('在python官网下载python安装包进行安装。')
- # 创建三级标题
- doc1.add_heading('第二步:安装 python-docx 库',3)
- # 创建段落描述
- doc1.add_paragraph('window下win+R输入CMD打开命令行,输入pip install python-docx即可下载。')
- # 保存文件
- doc1.save('word2.docx')
上面我们说了 add_heading 方法用来增加文章标题,不过通过上面代码我们能知道,这个方法的第二个参数为数字,其实这个就是用来标示几级标题的,在我们平时就用来标示章节。add_paragraph 方法则是用来在文章中增加段落的, 运行程序看下效果:
字体和引用
前面我们通过 add_paragraph 方法增加了三个段落,现在我们就看下如何对段落中字体如何操作,以及引用段落的操作。继续修改以上代码,增加对文章字体字号、加粗、倾斜等操作,具体代码如下:
- # 导入库
- from docx import Document
- from docx.shared import Pt
- from docx.shared import Inches
- from docx.oxml.ns import qn
- from docx.shared import RGBColor
- # 新建空白文档
- doc1 = Document()
- # 新增文档标题
- doc1.add_heading('如何使用 Python 创建和操作 Word',0)
- # 创建段落描述
- doc1.add_paragraph(' Word 文档在我们现在的生活和工作中都用的比较多,我们平时都使用 wps 或者 office 来对 Word 进行处理,可能没想过它可以用 Python 生成,下面我们就介绍具体如何操作……')
- # 创建一级标题
- doc1.add_heading('安装 python-docx 库',1)
- # 创建段落描述
- doc1.add_paragraph('现在开始我们来介绍如何安装 python-docx 库,具体需要以下两步操作:')
- # 创建二级标题
- doc1.add_heading('第一步:安装 Python',2)
- # 创建段落描述
- doc1.add_paragraph('在python官网下载python安装包进行安装。')
- # 创建三级标题
- doc1.add_heading('第二步:安装 python-docx 库',3)
- # 创建段落描述
- doc1.add_paragraph('window下win+R输入CMD打开命令行,输入pip install python-docx即可下载。')
- # 创建段落,添加文档内容
- paragraph = doc1.add_paragraph('这是第二步的安装描述!')
- # 段落中增加文字,并设置字体字号
- run = paragraph.add_run('(注意:这里设置了字号为20)')
- run.font.size = Pt(20)
- # 设置英文字体
- run = doc1.add_paragraph('这里设置英文字体:').add_run('This Font is Times New Roman ')
- run.font.name = 'Times New Roman'
- # 设置中文字体
- run = doc1.add_paragraph('这里设置中文字体:').add_run('当前字体为黑体')
- r
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!