【python

您所在的位置:网站首页 用word打开文件 【python

【python

2024-07-02 23:38:10| 来源: 网络整理| 查看: 265

python-docx是一个在Python环境下读写word文档的“利器”。在使用前可以通过 pip install python-docx 命令安装,再通过import docx 引用即可。下面简单介绍一下 python-docx 的基本操作。

1、新建/打开及保存

文档的新建和打开比较简单,只需要用docx的Document类,若指定路径则是打开文档;若没有指定路径则是新建文档。

对文档的操作结束后可以通过Document类的save方法进行保存,其中参数是保存的文件路径,或者要保存的文件流。一般指定路径即可。

doc = docx.Document('D:\project\python\docx\test.docx') #打开文档 doc_new = docx.Document() #新建文档 doc.save() #保存 doc_new.save('D:\project\python\docx\1.docx') #保存 2. 对象操作

python-docx包含了word文档的相关对象集合,如段落(doc.paragraphs)、表格(doc.tables)、节(doc.sections)、样式(doc.styles)、内置图形(doc.inline_shapes)等等。我们可以通过这些对象集合进行信息读取。在这里我主要说一下段落和表格的操作吧。

2.1 doc.paragraphs

在docx中,可以通过 doc.paragraphs 访问word中的段落信息。

我们通过 print(doc.paragraphs) 和 print(type(doc.paragraphs))  可以知道,doc.paragraphs给出的是一个包含paragraph对象的list。我们可以通过 len(doc.paragraphs)  查看段落的数量。

print(doc.paragraphs) print(type(doc.paragraphs)) # print(len(doc.paragraphs)) #9

如果想访问文档的具体内容,可以通过遍历的方式,利用 doc.paragraphs.text 的命令来读取,也可以通过制定的下标访问制定段落。

for i in doc.paragraphs: #遍历全部段落 print(i.text) #提取段落内容 print(doc.paragraphs[1]) #访问具体段落

 不过,上述方式仅仅是获得了文字内容,而把格式全忽略了。比如加粗、颜色、居中等等。在paragraph中,这些东西叫做run。一个Run对象就是style相同的一段文本,一个段落是由许多run组成的,就像这样:

我们可以通过runs分割、获取文本:

print(doc.paragraphs[1].text) #访问具体段落 print(doc.paragraphs[1].runs) print(len(doc.paragraphs[1].runs)) print(doc.paragraphs[1].runs[1].text)

运行结果如下: 

通过python-docx,我们不仅可以读出paragraph的内容,还进行写入和修改。修改比较简单,直接给text赋值就行:

print(doc.paragraphs[1].runs[3].text) doc.paragraphs[1].runs[3].text="不伤悲" #修改文字 print(doc.paragraphs[1].text)

处理刚才“芙蓉如面柳如眉,对此如何不泪垂”那一句,运行结果如下: 

添加内容可以使用 add_paragraph() 或 add_run()方法来进行:

import docx doc = docx.Document('1.docx') #在文档末尾添加段落 doc.add_paragraph(u'北方有佳人,遗世而独立',style=None) doc.add_paragraph(u'一顾倾人城,再顾倾人国',style='Heading 2') #在段落末尾添加文字 q=doc.paragraphs[2] q.add_run(u'爱而不见,搔首踟蹰',style=None) doc.save('1_new.docx')

运行结果如下:

【python-docx】Python读写Word文件_第1张图片

也可以对文字的样式进行设置。

import docx doc = docx.Document('1.docx') r=doc.paragraphs[2].runs[0] print(r.text) #运行结果:静女其姝,俟我于城隅 r.font.bold = True #加粗 r.font.italic = True #倾斜 doc.save('1_new.docx')

结果如下:

【python-docx】Python读写Word文件_第2张图片

2.2 doc.tables

在用docx处理word文件时,段落是可以用paragraph处理的,如果word中有表格,用 doc.paragraphs 根本读都读不到,因为表格在docx中是另一个类。要对表格进行操作,就需要用到 doc.tables 了。

我们可以通过下面的方式在.docx文件中添加表格:

table=doc.add_table(rows=2,cols=3,style=None)

接下来,我们用下面这个文档来作为例子,请记住它的样子:

【python-docx】Python读写Word文件_第3张图片

和doc.paragraphs类似,通过 doc.tables,我们可以获得文档中的全部表格,这也是个 list。但是但是表格是不能直接读的,因为我们知道表格的操作对象其实是“单元格”。我们可以分别对表格进行行(row)、列(column)、单元格(cell)的操作:

import docx doc = docx.Document('2.docx') print(type(doc.tables)) # print(len(doc.tables)) #2 #可以通过len(table.rows) 和 len(table.colums)读取表格的行和列 for i in doc.tables: print(len(i.rows),"*",len(i.columns)) #运行结果: 4*3 # 2*5

如果要遍历表格中的元素,可以使用一下几种方式,自己写的,可能还有别的更好的方法:

#方法一:每一行遍历,同理也可以按每一列遍历 for i in range(0,len(table.rows)): for j in table.rows[i].cells: print(j.text) #方法二:根据单元格下标依次遍历 for i in range(0,len(table.rows)): for j in range(0,len(table.columns)): print(table.cell(i,j).text)

通过遍历,我们可以查找表格中的数据或者找到对应单元格的位置。

for i in range(0,len(table.rows)): for j in range(0,len(table.columns)): if table.cell(i,j).text=="表格1-A21": print(i,",",j) #运行结果:2 , 1

要想提取表格中的内容,我们最好引入一个list对象用于保存数据:

import docx doc = docx.Document('2.docx') table=doc.tables[0] _table_list = [] #用于保存表格内容 for i, row in enumerate(table.rows): # 读每行 row_content = [] #用于保存每行内容 for cell in row.cells: # 读一行中的所有单元格 c = cell.text if c not in row_content: row_content.append(c) _table_list.append(row_content) for i in _table_list: print(i)

运行结果如下:

【python-docx】Python读写Word文件_第4张图片

要改变单元格中的内容也非常简单,直接对text赋值即可。如:

table.cell(2,2).text="王明"

表格中还需注意的是,对于合并单元格,其实它还是默认之前的行数或者列数:

import docx doc = docx.Document('2.docx') #例1 table_2 = doc.tables[1] n = 0 for i in range(0, len(table_2.rows)): for j in range(0, len(table_2.columns)): if table_2.cell(i, j).text == "表格2-B1": n += 1 print(n) #运行结果:2 #例2 for i in range(0,len(table_2.rows)): for j in range(0,len(table_2.columns)): if table_2.cell(i,j).text=="表格2-B2": print(i,",",j) #运行结果:0,1 # 0,2 # 0,3 # 0.4

要想增加表格的行数或者列数,可以使用 table.add_row() 或 table.add_column():

import docx doc = docx.Document('2.docx') table=doc.tables[0] table.add_row() table.add_column(10) #需要指明列宽 doc.save("2_new.docx")

运行结果如下:

【python-docx】Python读写Word文件_第5张图片

 我们现在把原文件中的表格1中的文字格式变为:蓝色,加粗。如果我们通过直接赋值的方法修改其中单元格中的内容,结果如下,可以看到修改后的内容有一个默认的文字格式。

【python-docx】Python读写Word文件_第6张图片

如果我们想在不改变单元格文字样式的情况下修改内容应该怎么办呢?只需要改一下赋值代码:

import docx doc = docx.Document('2.docx') table=doc.tables[0] #table.cell(2,2).text= '修改' #修改后内容以默认格式显示 table.cell(2,2).paragraphs[0].runs[0].text= '修改' #仅修改文字,保留原来的格式 doc.save("2_new.docx")

【python-docx】Python读写Word文件_第7张图片

好了,docx最基础的使用就讲到这里了,当然还有非常多其他的操作,以后用到了再慢慢总结。Bye~

参考:

https://www.cnblogs.com/wrajj/p/4914102.html

https://www.cnblogs.com/anpengapple/p/8372958.html

https://www.cnblogs.com/anpengapple/p/8372987.html



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭