Py学习  »  Python

使用python-docx模块读写word文件

生信修炼手册 • 3 年前 • 517 次点击  
欢迎关注”生信修炼手册”!
word文档的自动化处理是一件比较头痛的事情,因为深耕于windows操作系统,对于跨平台需求的word文档编辑,是非常痛苦的一件事。在python的生态环境中,提供了python-docx这个模块,可以方便的进行跨平台的word文档处理,但是只适合word 2007以后的文档,即后缀为docx的文档。

处理excel文件,需要先创建一个workbook,与之对应,处理word文档,首先需要创建Document对象,用法如下

>>> from docx import Document
>>> document = Document()
Document用于表征一个具体的word文档,在此基础上,包含了常见的各种元素,常用的几个元素列表如下

1.heading

2.paragraph

3.page break

4.table

5.picture

1. heading

heading表示标题,通过add_heading方法,可以添加标题,用法如下

>>> document.add_heading('header')

我们编辑word文档的时候,可以有多种不同等级的标题,在该模块中,通过level参数可以指定不同的等级,取值范围为0-9,用法如下

>>> document.add_heading('header', level = 0)

2. paragraph

paragraph表示段落,通过add_paragraph方法添加段落,用法如下

>>> document.add_paragraph("First paragraph")

在段落的基础上,可以通过add_run来不断进行拼接,用法如下

>>> document.add_paragraph("北京欢迎您").add_run("welcome to Beijing")

add_run的用处在于针对部分文字,单独进行处理,比如设置其字体大小,颜色等,用法如下

>>> paragraph = document.add_paragraph("First Paragraph")
>>> text = paragraph.add_run('Bold Text')
>>> text.bold = True

3. page break

page break表示分页,通过add_page_break方法进行添加,用法如下

>>> document.add_page_break()

4. table

table表示表格,通过add_table函数进行添加,用法如下




    
>>> table = document.add_table(rows=2, cols=2)

创建表格之后,我们需要对单元格进行赋值, 有以下两种方法

# cell函数获取对应的单元格
>>> cell = table.cell(0, 0)
>>> cell.text = "cell"
>>> table.row[0].cells[0].text
#  通过rows和cells的结合获取对应的单元格
>>> table.rows[0].cells[0].text
'cell'

对于一个table, 可以通过如下方式进行遍历

>>> for row in table.rows:
...     for cell in row.cells:
...             print(cell.text)

5, picture

picture表示图片,通过add_picture函数进行添加,用法如下

>>> document.add_picture('imae.png')

对于word文档而言,除了基本元素之外,还有一个重大元素就是样式。对于字体的大小,颜色,间隔等等各种样式进行设置,从而呈现出一个美观的排版效果,这是word和普通的文本编辑器最大的不同之处。

在python-docx模块中,内置了可以用于段落,表格,文字的各种style, 详细列表见如下链接

https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html

style具有name, type等属性,通过如下方式可以访问具体的style

# 遍历所有的内置styles
>>> for i in document.styles:
... print(i.name)
...
# 用字典的方式访问style, key为style的名字
>>> document.styles['Normal']
_ParagraphStyle('Normal') id: 60660368
>>> document.styles['Colorful Grid Accent 6']
_TableStyle('Colorful Grid Accent 6') id: 60660440
>>> document.styles['Medium Grid 3']
_TableStyle('Medium Grid 3') id: 60660368
>>> document.styles['Strong']

以段落为例,应用style的用法如下




    
# 一步法
>>> paragraph = document.add_paragraph("Fisrt Paragraph", style="Normal")
>>> paragraph = document.add_paragraph("Fisrt Paragraph", style=document.styles['Normal'])
# 两步法
>>> paragraph = document.add_paragraph("Fisrt Paragraph")
>>> paragraph.style = "Normal"

style是针对特定元素排版的一整套规则,包含了很多的样式,对于单个属性的设置,通过style就太厚重了,此时可以使用特定的属性来设置。

python-docx将常用的一些属性设置成了内置的常量,保存在docx.enum模块中,比如设置段落对齐方式为居中对齐,用法如下

>>> from docx.enum.text import WD_ALIGN_PARAGRAPH
>>> paragraph = document.add_paragraph()
>>> paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER

完整的内置常量可以参考官方的API文档,对word文档编辑之后,可以如下方式另存为新的文档

>>> document.save('out.docx')

python-docx提供了一种跨平台的word自动化处理功能,对于简单排版的word处理,非常的好用。

·end·
—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。
  更多精彩
  写在最后
转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

一个只分享干货的

生信公众号


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/99273
 
517 次点击