python批量提取word指定内容,python自动生成word文档
本文主要介绍Python对word文档的批量操作,一步步完成文档的创建。本文通过示例代码非常详细的为大家介绍,有需要的朋友可以参考一下。
00-1010阅读指南应用细节介绍
目录
前面几章介绍了如何批量操作excel和ppt。今天我们来谈谈word文档的批量操作。
导读
Python-docx允许您创建新文档并对现有文档进行更改。实际上,它只允许您对现有文档进行更改;只是如果你从一个没有内容的文档开始,一开始你可能会觉得你是在从头开始创建一个文档。
这个特性是一个强大的特性。文档的外观很大程度上取决于删除所有内容后还剩下什么。样式、页眉和页脚等内容与主要内容分开,允许您在初始文档中进行大量自定义,然后出现在您生成的文档中。
让我们一步一步地完成创建文档的步骤,一次创建一个示例,从您可以对文档执行的两个主要操作开始,打开文档并保存它。
这里给大家简单演示一下。
或者先定义合并单元格函数,以便以后多次调用。因为Word中处理表格的代码与Excel中的不同,所以要对函数进行微调。主要变化是归并的函数表达式。对于word中的表格,表达式为table.cell (row1,col1)。Merge (table.cell (row2,col2)),这意味着将表从row1中的col1列合并到row2中的col2列(row 2,col2应分别大于或等于row 1和col1)。请注意,cell(0,0)表示第一行和第一列中的单元格,依此类推。以下函数是在例28的基础上修改的。
#定义合并单元格的函数
def Merge_cells(表格,目标列表,开始行,列):
表:是一个需要操作的表。
Target_list:是一个目标列表,也就是有重复数据的列表。
Start_row:是开始行,即表中开始数据比较的行(需要去掉标题)。
Col:是需要处理数据的列。
Start=0 #起始行数
End=0 #结束行数
Reference=target_list[0] #设置基准,从列表中的第一个字符串开始。
for I in range(len(target _ list)): #遍历列表
if target_list[i]!=reference: #开始比较。如果内容不同,请执行以下操作
Reference=target_list[i] #基准成为列表中的下一个字符串
end=i - 1
table.cell(start start_row,col)。merge(table.cell(end start_row,col))
开始=结束1
If==len (target _ list)-1: #遍历到最后一行,如下所示
end=i
table.cell(start start_row,col)。merge(table.cell(end start_row,col))
然后你需要在word中读取相应表格中的数据并提取出来,这样才能作为判断是否合并的依据。用Document打开一个word文档,先检查里面的表数,这样我们就可以锁定要处理的表。因为word中可能会有隐藏的表格,或者表格中的某个段落去掉了边框,让人看起来像两个表格,所以在word中直接统计表格的个数有时是不靠谱的。根据len(doc.tables),本文档中有2个表格。打开word文档,我们可以看到要处理的表是第一个,即doc.tables[0]。如果情况比较复杂,我们可以打印表格第一行单元格的内容,进一步确认是否是我们需要处理的表格。确认表格的序号后,就可以开始阅读内容了。
从docx导入文档
doc=docx ument( receipt record . docx )
打印(此工作表有{}个表格。\ n。格式(len (doc。tables)) #检查表格中的数字,以便锁定我们要处理的表格。
Print(第一个表格第一行中单元格的内容如下:)
因为我
in doc.tables[0].rows[0].cells: #读取第一个表格的第一行的单元格中的内容
print(i.text)
第一个表格的第一行的单元格中的内容如下:
序号
供应商名称
货物编码
货物型号
货物说明
数量
日期
表格:
doc.tables[0].rows[0].cells[0].text序号
接着:
#读取word文档中的第一个表格的第二和第三列除标题和尾部总数行的数据doc = Document("收货记录.docx")
table = doc.tables[0] #已确定是第一个表格,其索引是0
supplier = [] #存储供应商名称
pn = [] #存储物料编码
max_row = len(table.rows) #获取第最大一行
print("表格共有{}行".format(max_row))
#读取第二行到29行,第2,3列中的数据
for i in range(1,max_row-1):
supplier_name = table.rows[i].cells[1].text #cells[1]指表格第二列
supplier.append(supplier_name)
material_pn = table.rows[i].cells[2].text #cells[2]指表格第三列
pn.append(material_pn)
print("获取到{}个供应商名称,{}个物料编码。".format(len(supplier),len(pn)))
表格共有30行
获取到28个供应商名称,28个物料编码。
Merge_cells(table,supplier,1,1) #开始合并行为2,索引为1;供应商名称是在2列,索引为1Merge_cells(table,pn,1,2) #开始合并行为2,索引为1;物料编码是在3列,索引为2
doc.save("检查.docx")
到这一步,合并单元格算是完成了,但结果如下图所示,原单元格中的内容全部集中在一起,造成了重复内容。我们需要重写这些单元格以覆盖掉重复的内容,即可得到我们想要的结果。
结果:
细节介绍
关于python-docx
库
链接:传送门
这里有关于操作的详细介绍
到此这篇关于Python批量对word文档进行操作的文章就介绍到这了,更多相关python批量word文档操作内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。