使用python处理一万份word表格简历操作

时间:2022-12-05 18:25:41

前言

有一天朋友A向我抱怨,他的老板要求他把几百份word填好的word表格简历信息整理到excel中,看着他一个个将姓名,年龄……从word表格里复制粘贴到excel里,边粘贴心里边暗暗诅咒着自己的boss……但毕竟新手小白,又不能违背老板的意愿说我不干了,爱咋咋地,于是过来向我求助。我说,这事情好办啊,学学python就能解决啊,简单容易上手。好了,接下来进入正题。

思路:首先针对每一份word表格进行分析

使用python处理一万份word表格简历操作

怎么才能利用python获取到word表格里面的信息,最初的想法是把word里面的表格转成网页格式,毕竟混迹爬虫浅水区多年,用正则表达式处理网页来获取信息是比较轻松的,于是想到把word转成网页格式,这么一想,整个人都疯了,几百份文件打开然后转成网页,那也有不少劳动量啊。于是在网上搜了许久,发现docx文件自己本身是压缩文件,打开压缩包之后竟然发现里面有个专门存储word里面文本的文件。

使用python处理一万份word表格简历操作

打开文件找,发现我们想要的信息全都藏在这个名为document.xml的文件里

使用python处理一万份word表格简历操作

于是基本过程就可以确定了

1. 打开docx的压缩包

2. 获取word里面的正文信息

3. 利用正则表达式匹配出我们想要的信息

4. 将信息存储到txt中(txt可以用excel打开)

5. 批量调用上述过程,完成一万份简历的提取工作

6. (检查数据是否有错误或缺失)

0x01 获取docx信息

利用python的zipfile库以及re库来处理docx压缩包里面的document.xml文件里的信息。

  1. import zipfile
  2. import re
  3. def get_document(filepath):
  4. z = zipfile.ZipFile(filepath, "r")
  5. text = z.read("word/document.xml").decode("UTF-8")
  6. text = re.sub(r"<.*?>", "", text)#去除xml里的所有标记符
  7. ###如果多份简历在同一个word文件里###
  8. #table_list = text.split("XX简历")[1:]#依据简历标题切分每一份简历信息
  9. #return table_list
  10. return text

打印text的结果

使用python处理一万份word表格简历操作

自此,输出了简历中的所有相关信息

0x02 抓取各字段值

接下来根据这些相关信息抓取各个字段的值

  1. import re
  2. def get_field_value(text):
  3. value_list = []
  4. m = re.findall(r"姓 名(.*?)性 别", table)
  5. value_list.append(m)
  6. m = re.findall(r"性 别(.*?)学 历", table)
  7. value_list.append(m)
  8. m = re.findall(r"民 族(.*?)健康状况", table)
  9. value_list.append(m)
  10. '''
  11. 此处省略其他字段匹配
  12. '''
  13. return value_list

这样就将每个字段匹配到的内容以一个列表的形式返回了

0x03 将内容写入到文件

接下来将这个列表里的内容写入到txt中

  1. str1 = ""
  2. for value in value_list:
  3. str1 = str1 + str(value[0]) + "\t"#每个字段值用制表符\t分隔
  4. str1 = str1 + "\n"
  5. with open("result.txt", "a+") as f:#将内容以追加形式写入到result.txt
  6. f.write(str1)

以上是将一个word转成了txt

只要再对文件夹中的文件进行批量处理就ok了

0x04 批量处理完整代码

以下附上完整代码

  1. import re
  2. import zipfile
  3. import os
  4. def get_document(filepath):
  5. z = zipfile.ZipFile(filepath, "r")
  6. text = z.read("word/document.xml").decode("UTF-8")
  7. text = re.sub(r"<.*?>", "", text)#去除xml里的所有标记符
  8. ###如果多份简历在同一个word文件里###
  9. table_list = text.split("XX简历")[1:]#依据简历标题切分每一份简历信息
  10. return table_list
  11. def get_field_value(text):
  12. value_list = []
  13. m = re.findall(r"姓 名(.*?)性 别", table)
  14. value_list.append(m)
  15. m = re.findall(r"性 别(.*?)学 历", table)
  16. value_list.append(m)
  17. m = re.findall(r"民 族(.*?)健康状况", table)
  18. value_list.append(m)
  19. '''
  20. 此处省略其他字段匹配
  21. '''
  22. return value_list
  23. cv_list = []
  24. for i in os.listdir(os.getcwd()):
  25. a = os.path.splitext(os.getcwd() + "\\" + i)#获取当前目录下所有文件的文件名
  26. if a[1] == '.docx':#如果文件后缀
  27. print(os.getcwd()+"\\"+i)
  28. cv_list = cv_list + get_document(os.getcwd() + "\\" + i)#每份简历信息为一个列表元素
  29. for i in cv_list:
  30. value_list = get_field_value(i)
  31. str1 = ""
  32. for value in value_list:
  33. str1 = str1 + str(value[0]) + "\t"
  34. str1 = str1 + "\n"
  35. with open("result.txt", "a+") as f:
  36. f.write(str1)

一万份word表格简历信息转成了txt,然后用excel打开txt即可。

补充:python word表格一些操作

数据格式(datas): 列表套列表

  1. aa =[ [1,2,3,4,5],[6,7,8,9],[]…]
  1. import os
  2. import requests
  3. import json
  4. import datetime
  5. from docx import Document
  6. from docx.shared import Inches, Pt, Cm
  7. from docx.oxml.ns import qn
  8. from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
  9. def create_insert_word_table(datas, stday, etday, s):
  10. """创建word表格以及插入数据"""
  11. doc = Document()
  12. doc.styles['Normal'].font.name = 'Calibri' # 是用来设置当文字是西文时的字体,
  13. doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') # 是用来设置当文字是中文时的字体
  14. # doc.styles['Normal'].font.size = Pt(14) # 设置所有文字字体大小为14
  15. distance = Inches(0.5)
  16. sec = doc.sections[0] # sections对应文档中的“节”
  17. sec.left_margin = distance # 以下依次设置左、右、上、下页面边距
  18. sec.right_margin = distance
  19. sec.top_margin = distance
  20. sec.bottom_margin = distance
  21. sec.page_width = Inches(11.7) # 设置页面宽度
  22. # sec.page_height = Inches(9) # 设置页面高度
  23. # doc.add_heading() # 设置标题,但是不符合我的条件,只能试用下方p.add_run('我是文字')
  24. p = doc.add_paragraph() # 添加段落
  25. p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置*对齐
  26. run = p.add_run('我是文字')
  27. run.font.size = Pt(22)
  28. doc.add_paragraph() # 添加空段落
  29. # 添加表格
  30. table = doc.add_table(rows=1, cols=10, style='Table Grid')
  31. table.style.name = 'Table Grid'
  32. table.style.font.size = Pt(14)
  33. table.rows[0].height = Cm(20)
  34. title = table.rows[0].cells
  35. title[0].text = '姓名'
  36. title[1].text = '1'
  37. title[2].text = '2'
  38. title[3].text = '3'
  39. title[4].text = '4'
  40. title[5].text = '5'
  41. title[6].text = '6 '
  42. title[7].text = '7'
  43. title[8].text = '8'
  44. title[9].text = '9'
  45. for i in range(len(datas)):
  46. cels = table.add_row().cells
  47. for j in range(len(datas[i])):
  48. # cels[j].text = str(datas[i][j])
  49. p = cels[j].paragraphs[0]
  50. p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置*对齐
  51. p.add_run(str(datas[i][j]))
  52. ph_format = p.paragraph_format
  53. # ph_format.space_before = Pt(10) # 设置段前间距
  54. # ph_format.space_after = Pt(12) # 设置段后间距
  55. ph_format.line_spacing = Pt(40) # 设置行间距
  56. doc.save('./files/项目总结.docx')

生成示例

使用python处理一万份word表格简历操作

可能出现的错误,[Errno 13] Permission denied: ‘./files/项目进展总结.docx'

是因为你打开文件未关闭,操作不了,关闭他就好了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/geoker/article/details/80149463