第105天: Python 操作 Word

上次给大家介绍了 Python 如何操作 Excel ,是不是感觉还挺有趣的,今天为大家再介绍下,用 Python 如何操作 Word ,这个可能跟数据处理关系不大,用的也不多,不过可以先了解下都能实现什么功能,以备不时之需。

安装 python-docx

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

1
2
3
4
5
6
7
8
9
10
11
12
$ pip3 install python-docx
################# 运行结果 ################
Collecting python-docx
  Downloading https://files.pythonhosted.org/packages/e4/83/c66a1934ed5ed8ab1dbb9931f1779079f8bca0f6bbc5793c06c4b5e7d671/python-docx-0.8.10.tar.gz (5.5MB)
     |████████████████████████████████| 5.5MB 553kB/s
Requirement already satisfied: lxml>=2.3.2 in /usr/local/lib/python3.7/site-packages (from python-docx) (4.4.1)
Building wheels for collected packages: python-docx
  Building wheel for python-docx (setup.py) ... done
  Stored in directory: /Users/mjg/Library/Caches/pip/wheels/18/0b/a0/1dd62ff812c857c9e487f27d80d53d2b40531bec1acecfa47b
Successfully built python-docx
Installing collected packages: python-docx
Successfully installed python-docx-0.8.10

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

写入 Word

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

标题

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# word_1.py

# 导入库
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')

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

标题

章节与段落

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# word_1.py

# 导入库
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 用来做文章的处理,可能没想过它可以用 Python 生成,下面我们就介绍具体如何操作……')

# 创建一级标题
doc1.add_heading('安装 python-docx 库',1)

# 创建段落描述
doc1.add_paragraph('现在开始我们来介绍如何安装 python-docx 库,具体需要以下两步操作:')

# 创建二级标题
doc1.add_heading('第一步:安装 Python',2)

# 保存文件
doc1.save('word1.docx')

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

章节段落

字体和引用

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# word_1.py

# 导入库
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 用来做文章的处理,可能没想过它可以用 Python 生成,下面我们就介绍具体如何操作……')

# 创建一级标题
doc1.add_heading('安装 python-docx 库',1)

# 创建段落描述
doc1.add_paragraph('现在开始我们来介绍如何安装 python-docx 库,具体需要以下两步操作:')

# 创建二级标题
doc1.add_heading('第一步:安装 Python',2)

# 创建段落,添加文档内容
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('当前字体为黑体')
run.font.name='黑体'
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), '黑体')

# 设置斜体
run = doc1.add_paragraph('这段设置:').add_run('文字的是斜体 ')
run.italic = True

# 设置粗体
run = doc1.add_paragraph('这段再设置:').add_run('这里设置粗体').bold = True

# 设置字体带下划线
run = doc1.add_paragraph('这段为下划线:').add_run('这里设置带下划线').underline = True

# 设置字体颜色
run = doc1.add_paragraph('这段字体为红色:').add_run('这里设置字体为红色')
run.font.color.rgb = RGBColor(0xFF, 0x00, 0x00)

# 增加引用
doc1.add_paragraph('这里是我们引用的一段话:人生苦短,我用Python。', style='Intense Quote')

# 保存文件
doc1.save('word1.docx')

上面代码主要是针对段落字体的各种设置,每段代码都标有注释应该比较容易理解,现在通过命令 python word_1.py 运行程序看下效果:

字体引用

项目列表

我们平时在使用 Word 时,为了能展示更清晰,会用到项目符号和编号,将内容通过列表的方式展示出来,下面我们新建一个文件 word_2.py 并编写如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# word_2.py

# 导入库
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn

# 新建文档
doc2 = Document()

doc2.add_paragraph('哪个不是水果:')

# 增加无序列表
doc2.add_paragraph(
    '苹果', style='List Bullet'
)
doc2.add_paragraph(
    '香蕉', style='List Bullet'
)
doc2.add_paragraph(
    '馄炖', style='List Bullet'
)

doc2.add_paragraph('2020年度计划:')
# 增加有序列表
doc2.add_paragraph(
    '每周健身一天', style='List Number'
)
doc2.add_paragraph(
    '学习50本书', style='List Number'
)
doc2.add_paragraph(
    '减少加班时间', style='List Number'
)

# 保存文件
doc2.save('word2.docx')

现在通过命令 python word_2.py 运行程序看下效果:

项目列表

图片和表格

我们平时编辑文章时,插入图片和表格也是经常使用到的,那用 Python 该如何操作插入图片和表格?首先我们随便找了个图片,我这用了 Python 安装时的一张截图,文件名为 python_install.png,然后在 word_2.py 文件中增加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# word_2.py

# 导入库
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn

# 新建文档
doc2 = Document()

doc2.add_paragraph('哪个不是水果:')

# 增加无序列表
doc2.add_paragraph(
    '苹果', style='List Bullet'
)
doc2.add_paragraph(
    '香蕉', style='List Bullet'
)
doc2.add_paragraph(
    '馄炖', style='List Bullet'
)

doc2.add_paragraph('2020年度计划:')
# 增加有序列表
doc2.add_paragraph(
    '每周健身一天', style='List Number'
)
doc2.add_paragraph(
    '学习50本书', style='List Number'
)
doc2.add_paragraph(
    '减少加班时间', style='List Number'
)

doc2.add_heading('图片',2)

# 增加图像
doc2.add_picture('python_install.png', width=Inches(5.5))

doc2.add_heading('表格',2)

# 增加表格,这是表格头
table = doc2.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '编号'
hdr_cells[1].text = '姓名'
hdr_cells[2].text = '职业'

# 这是表格数据
records = (
    (1, '张三', '电工'),
    (2, '张五', '老板'),
    (3, '马六', 'IT')
)

# 遍历数据并展示
for id, name, work in records:
    row_cells = table.add_row().cells
    row_cells[0].text = str(id)
    row_cells[1].text = name
    row_cells[2].text = work

# 手动增加分页
doc2.add_page_break()

# 保存文件
doc2.save('word2.docx')

OK,现在再来让我们再来看下效果:

图片表格

读取 Word 文件

上面写了很多用 Python 创建空白 Word 文件格式化字体并保存到文件中,接下来我们再简单介绍下如何读取已有的 Word 文件,请看如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# word_3.py

# 引入库
from docx import Document

# 打开文档1
doc1 = Document('word1.docx')

# 读取每段内容
pl = [ paragraph.text for paragraph in doc1.paragraphs]

print('###### 输出word1文章内容')
# 输出读取到的内容
for i in pl:
    print(i)


# 打开文档2
doc2 = Document('word2.docx')

print('\n###### 输出word2文章内容')

pl2 = [ paragraph.text for paragraph in doc2.paragraphs]

# 输出读取到的内容
for j in pl2:
    print(j)

# 读取表格材料,并输出结果
tables = [table for table in doc2.tables]
for table in tables:
    for row in table.rows:
        for cell in row.cells:
            print (cell.text,end='  ')
        print()
    print('\n')

以上代码是将之前我们输出的两个文档内容都读取出来,当然这里只是打印到控制台,并没有做其他处理。现在我们来执行命令 python word_3.py 把代码执行看下结果:

读取并打印

总结

本文为大家介绍了 Python 中如何操作 Word 文档,其中写入文件时,我们常用各种标题段落字体设置等,会比较复杂,这里只是简单介绍了最常用的几种方法,如果想了解更多请参考文末官网介绍,之后会为大家介绍其他类型文件的操作方式,希望大家能多多关注。

参考

python-excel 官网:https://python-docx.readthedocs.io/en/latest/index.html

示例代码:https://github.com/JustDoPython/python-100-day

Python Geek Tech wechat
欢迎订阅 Python 技术,这里分享关于 Python 的一切。