Hello,我是小张,咱们好久不见~

今日文章介绍一个实战事例,与主动化作业相关;事例思维是源于前两天帮读者做了一个 demo ,需求大致将一上百个 word 中表格内容提取出来(悉数word 中表格样式相同),把提取到的内容主动存入 Excel 中

word 中表格办法如下

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

现在含有数个上面办法的 word 文档需求收拾,政策是运用 python 主动生成下面办法 excel 表格

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

正式事例解说之前,先看一下源码超市转化作用,脚本先把指定文件夹下的 doc 文件转化为 docx ,随后主动生成一个 excel 表格,表格内中即为悉数 word 中的内容

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

触及的库

本事例中用到的 Pythonpython能够做什么工作 库有以下几个

python-docx
pandas
os
pywin32

do源码资本c 转化为 doc源码之家x

本事例中 word 中表格内容的提取用到的是 pythonapp装置下载-docx 库,关于 python-docx 一些根底用法能够参看

word 文档有时是以 doapproachc 类型保存app装置下载的, python-docx 只能处理 docx 文件类型,在提取表格内容之前,需进行一次文件类python能够自学吗型格式转化:把 doc 批量windows10转化为 docx

doc 转 docx 最简略的办法 经过Office 中 word 组件翻开 docwindows7 文件,然后手动保存为 docx 文件,关于单个文档这个办法还行,文档数量达到上百个的话还用这种办法就有点appear烦了,

这儿介绍一个 python 库 pywin32 来帮助咱们处理这个问题,pywin32 作为扩展模块python123, 里边封装了很多 Windows API 函数,例如调用 Office 等应用组件、删去指定文件、获取鼠标坐标等等

运用 pywindows更新有必要吗win32 控制Office 中 Word 组件主动完毕 翻开、保存 操作,把悉数 doc 文件类型转化为 docx 文件类型,过程分为以下三步:

1,树立一个 word 组件

from win32com imwindows7port client as wc
word = wc.Dispatch('Word.Application')

2,翻开 word 文件

doc =appstore word.Documappstoreents.Open(pathpython能够自学吗)

3,保存封闭

doc.SaveAs(源码编辑器手机版下载save_path,12, False, "", True, "", False, False, False, False)
doc.Close()

无缺代码

	path_lis源码编辑器编程猫下载t = os.listdir(path)
doc_list = [os.paWindowsth.join(path,str(i)) for i in path_list if str(i).endswith('doc')]
word = wc.Dispatch('WorWindowsd.Application')
print(doc_list)
for path in doc_list:
print(path)
save_path = str(path).replace('doc','docx')
doc = word.Documents.Open(path)
doc.SaveAs(save_path,12, False, "", True, "", False, False, False, False)
doc.Close()
print('{} Save sucessfully '.format(save_path))
word.Quiappreciatet()

doapp装置下载cx 库提取单个表格内容

在批量操作之前,首要需求搞定单个表格中的内容,只需咱们搞定了单个 word,剩下的加一源码编辑器编程猫下载个递归即可

用 docx 库对 word 中表格内容提取,首要用到 Table、rows、ceAPPlls 等方针

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

Table 标明表格,rows 标明表格中行列表,以迭代器办法存在;cells 标明单python是什么意思元格列表,也是以迭代器办法

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

操作之前,需了解下面几个根底函数

  • 经过 Documenpython123t 函数读取文件途径,回来一个 Document 方针

  • Document.tables 可回来 woPythonrd 中的表格列表;

  • table.rows 回来appstore表格中的行列表;

  • row.cellapp装置下载s 回来该行中含有的单元格windows10列表;

  • cell.text 回来该单元格中文本信息

了解了上面内容之后源码编辑器编程猫下载,接下来的操作思路就比较清楚了apple;word 表格中文本信息能够经过两个 fo源码超市r 循环来完毕:第一个 for 循环获取表格中悉数行方针,第二个 for 循环定位每一行的单元格,凭借 cell.text 获取单元格文本内容;

用代码windows是什么意思试一下这个思路是否可行

	document = docx.Document(doc_path)
for table in document.tables:
foWindowsr row_indwindows10ex,row in enumerate(table.rows):
for col_index,cell in enumerate(row.ce源码编辑器编程猫下载lls):
print(' pos index is ({},{})'.format(row_indpython能够自学吗ex,col_index))
print('cellpython下载装置教程 text is {}'.format(cell.text))

会发现,毕竟提取到的内容是有重复的,,,

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

源码之家现上面原因,是因为单windows10元格吞并问题,例如下面表格的单元格 吞并了 (1,1)->(1,5),docx 库在处理这类吞并单元格 时并源码年代没有当成一个,而windows是什么意思是以单个办法进行处理,因而 for 迭代时 (1,1)->(1,5) 单元格回来了五个,每一个单元格文本信息application都回来

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

面对以上文本重复问题,需求增加一个去重机制, 姓名、windows7旗舰版性别、windows系统年纪APP...学历学位 等字段作为列名 col_keys,后边王五、女、37、... 学士 等作为col_values,提取时设定一个索引,偶数为 col_keys, 奇数为 col_vaue源码编辑器编程猫下载s ;

代码重构后如下:

	document =windows10 docx.Document(doc_path)
col_keys = [] # 获取列python根底教程名
col_valueapples = [] # 获取列值
index_num = 0
# 增加一个去重机制
fore_str = ''
for table in document.tables:
for row_index,row in enumeratpython下载装置教程e(table.roapprovews):
for col_index,cell in enumerate(row.cells):
if fore_s源码之家tr != cell.text:
if index_nwindows更新um % 2==0:
col_keys.append(cell.texpython能够做什么工作t)
else:
col_values.append(cell.text)
fore_str = cell.tex源码年代t
index_num +=1
print(f'windows更新有必要吗col keys is {col_keys}')
print(f'col vaapplelues is {col_values}')

毕竟提取后的作用如下

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

批量 wordpython123渠道登录 提取,保存至 csv 文件源码年代

能够处理单个 word 文件之后,一个递归即可提取到悉数 word 文本表格内windows怎样激活容,毕竟运用 pandas 把获取到的数据写入到 csv 文件即可!

def GetData_frompath(doc_path):
document = docx.Dopython怎样读cument(doc_path)
col_keys = [] # 获取列名
col_values = [] # 获取列值
index_num = 0
# 增加一个去重机制
forewindows10_str = ''
for table in document.tables:
for row_index,row in enumerate(table.rowpython是什么意思s):
fAPPor co源码编程l_index,cell in enumerate(row.cells):
if fore_str != cpython能够自学吗ell.teappearxt:windows是什么意思
if index_num % 2==0:
col_kwindows更新eys.append(cell.text)
else:
col_values.appen源码之家d(cell.text)
fore_str = cell.text
index_num +=appointment1
reappearanceturn col_keys,col_values
pd_data = []
for index,single_path in enumeraappointmentte(wordlist_path):
col_names,col_values = GetData_frompath(single_path)
if index == 0:
pd_data.appenAPPd(col_names)
pd_dwindows7ata.append(col_values)
else:
pd_data.append(col_values)
df = pd.DataFrame(pd_data)
df.to_csv(woapplicationrd_paths+'/result.csv', encoding='utf_8_sig',inapprovedex=False)

证件号、身源码编辑器份证号app装置下载格式

翻开生源码编辑器编程猫下载Python的 csv 文件会发现联系办法、身份证号 两栏的数字格式是以数值windows7旗舰版存储,不是咱们想要的类型,想要无缺展现,需存储之前把数值转化为文python怎样读

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

处理办法,找到地点的单元格,前面元素前面加一个 ’t‘windows怎样激活 制表符即可

col_values[7] = 't'+col_values[7]
col_values[8] = 't'+colwindows是什么意思_values[8]

主动化工作 — Python 批量提取 Word 中表格内容,一键写入 Excel

源码获取

本事例中用到的源码数据获取办法,注重微信群众号:小张Python,在群众号后台回复关键字:210328 即可!windows7

小结windows7

本事例中只用到了 docx 库中的一部分办法,首要触及到源码编辑器手机版下载了 word 中 Table 的底子操作,关于一些从事文职作业的同学来说日常作业中可能会遇到上面类似问题,因而特意同享在这儿,期望APP能够对app装置下载咱们有所帮助

好了,以上就是本篇文章的悉数内容了,毕竟感谢咱们的阅览,咱们下源码期见!