Word和Excel大概是我们最常碰到的两种文件了,
我前面写过pandas的基本操作
,利用它可以轻松完成Excel文件的批量处理,那么对于word文件的处理是否也有同样简单的方式,答案是肯定的,这涉及到python的另一个库
docx
,这篇文章的主要内容是:
如何批量处理word中的表格
我随便找了一个Word文件,它的部分内容如下:
这个文件中有多个这样表格,我们要将它们处理成一个简单表——属性一行,值 一行
下面正式开始,docx之外的内容我将不做详细说明,有问题请留言。
pip install python-docx
from docx import Document
import pandas as pd
doc=Document('2007年三江源生态监测森林数据集.docx')
ps:docx不支持doc格式的word文件。
tb=doc.tables
rows=tb[0].rows
cols=rows[0].cells
cell=cols[0]
text=cell.text
有了上面的基础知识,读取word中的表格应该没什么问题了,下面是是完整代码:
doc=Document('2007年三江源生态监测森林数据集.docx')
index,key,value=[],[],[]
table_index=0
for tb in doc.tables:
table_index+=1
row_index=0
for row in tb.rows:
row_index+=1
for cell in row.cells:
text=""
for p in cell.paragraphs:
text+=p.text
if row_index%2==0:
value.append(text)
index.append(table_index)
else:
key.append(text)
现在word中所有表格的内容已经读出来了,不过是在两个列表中,将它们重新构造成一个表格。
df=pd.DataFrame({'table_index':index,'key':key,'value':value})

但是这个表格并不是我们想要的结果,我们想要的是key为表头,value为值,table_index为索引,所以我们还需要进一步的操作。
df=df.drop_duplicates(['table_index','key'])
df1=df.pivot(index='table_index',columns='key',values='value')
df1.columns=list(df1.columns)
df1.index=list(df1.index)
最终得到的表格是这样的:

上面的表格内容太多,我们取一部分写入word中
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.shared import Cm
df2=df1.iloc[:10,:6]
d=Document()
tb=d.add_table(rows=len(df2.index),cols=len(df2.columns))
tb.add_row()
for i in range(len(df2.columns)):
tb.cell(0,i).text=df2.columns[i]
for row in range(1,len(df2.index)+1):
for col in range(len(df2.columns)):
tb.cell(row,col).width=1
tb.cell(row,col).text=df2.iloc[row,col]
tb.cell(row,col).width=Cm(6)
tb.cell(row,col).ipynb
tb.style='Medium Grid 1 Accent 1'
tb.autofit=True
d.save('tb.docx')
最后生成的word表格是这样的:

关于表格的样式控制将在另一篇博客中展开讨论:利用python批量处理Word文件——表格(二)样式控制
关于word表格的处理就到这里了,现实中我们要处理的文件内容千变万化,不过只要熟练这些基础操作,就可以以不变应万变,后面我会继续写word中其它内容的处理,感兴趣的朋友可以多多关注。
Word和Excel大概是我们最常碰到的两种文件了,我前面写过pandas的基本操作,利用它可以轻松完成Excel文件的批量处理,那么对于word文件的处理是否也有同样简单的方式,答案是肯定的,这涉及到python的另一个库docx,这篇文章的主要内容是:如何批量处理word中的表格我随便找了一个Word文件,它的部分内容如下:这个文件中有多个这样表格,我们要将它们处理成一个简单表——属性...
用于读取,编写和创建子文档的python-docx
jinja2用于管理插入到模板docx中的标签
之所以创建python-docx-template,是因为python-docx具有创建文档但不能修改文档的强大功能。
这个想法是开始创建您要使用Microsoft Word生成的文档的示例,它可以随您的需要而复杂:图片,索引表,页脚,页眉,变量,以及您可以使用Word进行的任何操作。 然后,由于您仍在使用Microsoft Word编辑文档,因此可以在文档中直接插入类似jinja2的标签。 您将文档另存为.docx文件(xml格式):它将是您的.docx模板文件。
现在,您可以使用python-docx-template从此.docx模板和关联的上下文变量生成所需的wo
利用python-docx模块,写批量生日邀请函
有关
python-docx的使用方法,可以参考官方的API文档。这里使用了其中的一些基本功能,来完成一个简单的任务:为参加聚会的好友,每人写一个
word文档邀请函。邀请函也很简单,如下图:
下面是代码:
import
docx
from
docx.enum.text import WD_PARAGRAPH_ALIGNMENT #引入文字的位置样式
from
docx.shared import Pt #设置字体
#从guest.txt
文件中读取一个客人列表
guests=open('guest.txt')
guest_list=[]
Python-docx 是一个 Python 用于创建 Microsoft Word (.docx) 文件的库。它可以创建包含文本、图片、表格、列表、样式及其它元素的 Word 文档。
使用 python-docx,可以通过代码动态地创建 Word 文档,而不需要手动打开 Word 并手动创建文档。不仅如此,python-docx 还可以处理并修改已存在的 Word 文档,例如修改文本内容、表格数据,添加图片和段落等等。
使用 python-docx,我们可以创建完成微软 Office 的电子文档,而不依赖人类的操作,比如报告、信函、契约等等。使用这个库,你可以轻松地将程序输出的文章转换为 Word 文档,并使其兼容于大部分使用 Word 的环境,非常方便。
此外,使用 python-docx 还可以轻松地操作 Word 样式。你可以通过代码创建、修改和选择所需的文本格式,使有机构标准的文档符合各种文件格式。
当然,python-docx 在处理大型文档时,可能会出现效率低下的问题,因为它只是 Python 生成的 Word 文档,在处理复杂的文本格式时,您需要进行更多的开发和调整来提高性能。