教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!! - Go语言中文社区

教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!


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 工具安装三个库即可,安装命令如下:

  1. $ pip install xlrd xlwt xlutils 

写入 Excel

接下来我们就从写入 Excel 开始,话不多说直接看代码如下:

  1. # 导入 xlwt 库  
  2. import xlwt  
  3. # 创建 xls 文件对象  
  4. wb = xlwt.Workbook()  
  5. # 新增两个表单页  
  6. sh1 = wb.add_sheet('成绩')  
  7. sh2 = wb.add_sheet('汇总')  
  8. # 然后按照位置来添加数据,第一个参数是行,第二个参数是列  
  9. # 写入第一个sheet  
  10. sh1.write(0, 0, '姓名')  
  11. sh1.write(0, 1, '专业')  
  12. sh1.write(0, 2, '科目')  
  13. sh1.write(0, 3, '成绩')  
  14. sh1.write(1, 0, '张三')  
  15. sh1.write(1, 1, '信息与通信工程')  
  16. sh1.write(1, 2, '数值分析')  
  17. sh1.write(1, 3, 88)  
  18. sh1.write(2, 0, '李四')  
  19. sh1.write(2, 1, '物联网工程')  
  20. sh1.write(2, 2, '数字信号处理分析')  
  21. sh1.write(2, 3, 95)  
  22. sh1.write(3, 0, '王华') 
  23. sh1.write(3, 1, '电子与通信工程')  
  24. sh1.write(3, 2, '模糊数学')  
  25. sh1.write(3, 3, 90)  
  26. # 写入第二个sheet  
  27. sh2.write(0, 0, '总分')  
  28. sh2.write(1, 0, 273)  
  29. # 最后保存文件即可  
  30. wb.save('test.xls') 

运行代码,结果会看到生成名为 test.xls 的 Excel 文件,打开文件查看如下图所示:

以上就是写入 Excel 的代码,是不是很简单,下面我们再来看下读取 Excel 该如何操作。

读取 Excel

读取 Excel 其实也不难,请看如下代码:

  1. # 导入 xlrd 库  
  2. import xlrd  
  3. # 打开刚才我们写入的 test_w.xls 文件  
  4. wb = xlrd.open_workbook("test_w.xls")  
  5. # 获取并打印 sheet 数量  
  6. print( "sheet 数量:", wb.nsheets)  
  7. # 获取并打印 sheet 名称  
  8. print( "sheet 名称:", wb.sheet_names())  
  9. # 根据 sheet 索引获取内容  
  10. sh1 = wb.sheet_by_index(0)  
  11. # 或者  
  12. # 也可根据 sheet 名称获取内容  
  13. sh = wb.sheet_by_name('成绩')  
  14. # 获取并打印该 sheet 行数和列数  
  15. print( u"sheet %s 共 %d 行 %d 列" % (sh1.name, sh1.nrows, sh1.ncols))  
  16. # 获取并打印某个单元格的值  
  17. print( "第一行第二列的值为:", sh1.cell_value(0, 1))  
  18. # 获取整行或整列的值  
  19. rows = sh1.row_values(0) # 获取第一行内容  
  20. cols = sh1.col_values(1) # 获取第二列内容  
  21. # 打印获取的行列值  
  22. print( "第一行的值为:", rows)  
  23. print( "第二列的值为:", cols)  
  24. # 获取单元格内容的数据类型  
  25. print( "第二行第一列的值类型为:", sh1.cell(1, 0).ctype)  
  26. # 遍历所有表单内容  
  27. for sh in wb.sheets():  
  28.     for r in range(sh.nrows):  
  29.         # 输出指定行  
  30.         print( sh.row(r)) 

输出如下结果:

细心的朋友可能注意到,这里我们可以获取到单元格的类型,上面我们读取类型时获取的是数字1,那1表示什么类型,又都有什么类型呢?别急下面我们通过一个表格展示下:

数值 类型 说明
0 empty
1 string 字符串
2 number 数字
3 date 日期
4 boolean 布尔值
5 error 错误

通过上面表格,我们可以知道刚获取单元格类型返回的数字1对应的就是字符串类型。

修改 excel

上面说了写入和读取 Excel 内容,接下来我们就说下更新修改 Excel 该如何操作,修改时就需要用到 xlutils 中的方法了。直接上代码,来看下最简单的修改操作:

  1. # 导入相应模块  
  2. import xlrd  
  3. from xlutils.copy import copy  
  4. # 打开 excel 文件  
  5. readbook = xlrd.open_workbook("test_w.xls")  
  6. # 复制一份  
  7. wb = copy(readbook)  
  8. # 选取第一个表单  
  9. sh1 = wb.get_sheet(0)  
  10. # 在第五行新增写入数据  
  11. sh1.write(4, 0, '王欢')  
  12. sh1.write(4, 1, '通信工程')  
  13. sh1.write(4, 2, '机器学习')  
  14. sh1.write(4, 3, 89)  
  15. # 选取第二个表单  
  16. sh1 = wb.get_sheet(1)  
  17. # 替换总成绩数据  
  18. sh1.write(1, 0, 362)  
  19. # 保存  
  20. wb.save('test.xls') 

从上面代码可以看出,这里的修改 Excel 是通过 xlutils 库的 copy 方法将原来的 Excel 整个复制一份,然后再做修改操作,最后再保存。看下修改结果如下:

格式转换操作

在平时我们使用 Excel 时会对数据进行一下格式化,或者样式设置,在这里把上面介绍写入的代码简单修改下,使输出的格式稍微改变一下,代码如下:

  1. # 导入 xlwt 库  
  2. import xlwt  
  3. # 设置写出格式字体红色加粗  
  4. styleBR = xlwt.easyxf('font: name Times New Roman, color-index red, bold on')  
  5. # 设置数字型格式为小数点后保留两位  
  6. styleNum = xlwt.easyxf(num_format_str='#,##0.00' 
  7. # 设置日期型格式显示为YYYY-MM-DD  
  8. styleDate = xlwt.easyxf(num_format_str='YYYY-MM-DD' 
  9. # 创建 xls 文件对象  
  10. wb = xlwt.Workbook()  
  11. # 新增两个表单页  
  12. sh1 = wb.add_sheet('成绩')  
  13. sh2 = wb.add_sheet('汇总')  
  14. # 然后按照位置来添加数据,第一个参数是行,第二个参数是列  
  15. sh1.write(0, 0, '姓名', styleBR)   # 设置表头字体为红色加粗  
  16. sh1.write(0, 1, '日期', styleBR)   # 设置表头字体为红色加粗  
  17. sh1.write(0, 2, '成绩', styleBR)   # 设置表头字体为红色加粗  
  18. # 插入数据  
  19. sh1.write(1, 0, '张三',)  
  20. sh1.write(1, 1, '2020-07-01', styleDate)  
  21. sh1.write(1, 2, 90, styleNum)  
  22. sh1.write(2, 0, '李四')  
  23. sh1.write(2, 1, '2020-08-02')  
  24. sh1.write(2, 2, 95, styleNum)  
  25. # 设置单元格内容居中的格式  
  26. alignment = xlwt.Alignment()  
  27. alignment.horz = xlwt.Alignment.HORZ_CENTER  
  28. style = xlwt.XFStyle()  
  29. style.alignment = alignment  
  30. # 合并A4,B4单元格,并将内容设置为居中  
  31. sh1.write_merge(3, 3, 0, 1, '总分', style)  
  32. # 通过公式,计算C2+C3单元格的和  
  33. sh1.write(3, 2, xlwt.Formula("C2+C3"))  
  34. # 对 sheet2 写入数据  
  35. sh2.write(0, 0, '总分', styleBR)  
  36. sh2.write(1, 0, 185)  
  37. # 最后保存文件即可  
  38. wb.save('test.xls') 

输出结果:

可以看出,使用代码我们可以对字体,颜色、对齐、合并等平时 Excel 的操作进行设置,也可以格式化日期和数字类型的数据。当然了这里只是介绍了部分功能,不过这已经足够我们日常使用了,想了解更多功能操作可以参考官网。

python-excel官网:www.python-excel.org/

Python 操作 Word

安装 python-docx

处理 Word 需要用到 python-docx 库,目前版本为 0.8.10 ,执行如下安装命令:

  1. $ pip install python-docx  
  2. ################# 运行结果 ################  
  3. C:UsersY>pip install python-docx  
  4. Looking in indexes: https://pypi.doubanio.com/simple  
  5. Collecting python-docx  
  6.   Downloading https://pypi.doubanio.com/packages/e4/83/c66a1934ed5ed8ab1dbb9931f1779079f8bca0f6bbc5793c06c4b5e7d671/python-docx-0.8.10.tar.gz (5.5MB)  
  7.      || 5.5MB 3.2MB/s  
  8. Requirement already satisfied: lxml>=2.3.2 in c:usersyappdatalocalprogramspythonpython37libsite-packages (from python-docx) (4.5.0)  
  9. Building wheels for collected packages: python-docx  
  10.   Building wheel for python-docx (setup.py) ... done  
  11.   Created wheel for python-docx: filename=python_docx-0.8.10-cp37-none-any.whl size=184496 sha256=7ac76d3eec848a255b4f197d07e7b78ab33598c814d536d9b3c90b5a3e2a57fb 
  12.    Stored in directory: C:UsersYAppDataLocalpipCachewheels57d71bb534b75918095724d0342119154c3d0fc035cedfe2f6c9a6c  
  13. Successfully built python-docx  
  14. Installing collected packages: python-docx  
  15. Successfully installed python-docx-0.8.10  
  16. 复制代码 

OK,如果提示以上信息则安装成功。

写入 Word

平时我们在操作 Word 写文档的时候,一般分为几部分:标题、章节、段落、图片、表格、引用以及项目符号编号等。下面我们就按这几部分如何用 Python 操作来一一介绍。

标题

文档标题创建比较简单,通过 Document() 创建出一个空白文档,只要调用 add_heading 方法就能创建标题。

  1. # 导入库  
  2. from docx import Document  
  3. from docx.shared import Pt  
  4. from docx.shared import Inches  
  5. from docx.oxml.ns import qn  
  6. # 新建空白文档  
  7. doc1 = Document()  
  8. # 新增文档标题  
  9. doc1.add_heading('如何使用 Python 创建和操作 Word',0)  
  10. # 保存文件  
  11. doc1.save('word1.docx') 

这样就完成了创建文档和文章标题的操作,下面运行程序,会生成名为 word1.docx 的文档,打开文章显示如下图所示:

章节与段落

有了文章标题,下面我们来看章节和段落是怎么操作的,在上面代码后面增加章节和段落操作的代码如下:

  1. # 导入库  
  2. from docx import Document  
  3. from docx.shared import Pt  
  4. from docx.shared import Inches  
  5. from docx.oxml.ns import qn  
  6. # 新建空白文档  
  7. doc1 = Document()  
  8. # 新增文档标题  
  9. doc1.add_heading('如何使用 Python 创建和操作 Word',0)  
  10. # 创建段落描述  
  11. doc1.add_paragraph(' Word 文档在我们现在的生活和工作中都用的比较多,我们平时都使用 wps 或者 office 来对 Word 进行处理,可能没想过它可以用 Python 生成,下面我们就介绍具体如何操作……') 
  12. # 创建一级标题  
  13. doc1.add_heading('安装 python-docx 库',1)  
  14. # 创建段落描述  
  15. doc1.add_paragraph('现在开始我们来介绍如何安装 python-docx 库,具体需要以下两步操作:')  
  16. # 创建二级标题  
  17. doc1.add_heading('第一步:安装 Python',2)  
  18. # 创建段落描述  
  19. doc1.add_paragraph('在python官网下载python安装包进行安装。')  
  20. # 创建三级标题  
  21. doc1.add_heading('第二步:安装 python-docx 库',3)  
  22. # 创建段落描述  
  23. doc1.add_paragraph('window下win+R输入CMD打开命令行,输入pip install python-docx即可下载。')  
  24. # 保存文件  
  25. doc1.save('word2.docx') 

上面我们说了 add_heading 方法用来增加文章标题,不过通过上面代码我们能知道,这个方法的第二个参数为数字,其实这个就是用来标示几级标题的,在我们平时就用来标示章节。add_paragraph 方法则是用来在文章中增加段落的, 运行程序看下效果:

字体和引用

前面我们通过 add_paragraph 方法增加了三个段落,现在我们就看下如何对段落中字体如何操作,以及引用段落的操作。继续修改以上代码,增加对文章字体字号、加粗、倾斜等操作,具体代码如下:

  1. # 导入库  
  2. from docx import Document  
  3. from docx.shared import Pt  
  4. from docx.shared import Inches  
  5. from docx.oxml.ns import qn  
  6. from docx.shared import RGBColor  
  7. # 新建空白文档  
  8. doc1 = Document()  
  9. # 新增文档标题  
  10. doc1.add_heading('如何使用 Python 创建和操作 Word',0)  
  11. # 创建段落描述  
  12. doc1.add_paragraph(' Word 文档在我们现在的生活和工作中都用的比较多,我们平时都使用 wps 或者 office 来对 Word 进行处理,可能没想过它可以用 Python 生成,下面我们就介绍具体如何操作……') 
  13. # 创建一级标题  
  14. doc1.add_heading('安装 python-docx 库',1)  
  15. # 创建段落描述  
  16. doc1.add_paragraph('现在开始我们来介绍如何安装 python-docx 库,具体需要以下两步操作:')  
  17. # 创建二级标题  
  18. doc1.add_heading('第一步:安装 Python',2)  
  19. # 创建段落描述  
  20. doc1.add_paragraph('在python官网下载python安装包进行安装。')  
  21. # 创建三级标题  
  22. doc1.add_heading('第二步:安装 python-docx 库',3)  
  23. # 创建段落描述  
  24. doc1.add_paragraph('window下win+R输入CMD打开命令行,输入pip install python-docx即可下载。')  
  25. # 创建段落,添加文档内容  
  26. paragraph = doc1.add_paragraph('这是第二步的安装描述!')  
  27. # 段落中增加文字,并设置字体字号  
  28. run = paragraph.add_run('(注意:这里设置了字号为20)')  
  29. run.font.size = Pt(20)  
  30. # 设置英文字体  
  31. run = doc1.add_paragraph('这里设置英文字体:').add_run('This Font is Times New Roman ')  
  32. run.font.name = 'Times New Roman'  
  33. # 设置中文字体  
  34. run = doc1.add_paragraph('这里设置中文字体:').add_run('当前字体为黑体')  
  35. r
版权声明:本文来源51CTO,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:http://developer.51cto.com/art/202010/629142.htm
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-16 09:35:03
  • 阅读 ( 917 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢