当前位置 博文首页 > 使用python处理一万份word表格简历操作

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

    作者:geoker 时间:2021-05-23 18:29

    前言

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

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

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

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

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

    1. 打开docx的压缩包

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

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

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

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

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

    0x01 获取docx信息

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

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

    打印text的结果

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

    0x02 抓取各字段值

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

    import re
    def get_field_value(text):
      value_list = []
      m = re.findall(r"姓 名(.*?)性  别", table)
      value_list.append(m)
      m = re.findall(r"性  别(.*?)学  历", table)
      value_list.append(m)
      m = re.findall(r"民 族(.*?)健康状况", table)
      value_list.append(m)  
      '''
      此处省略其他字段匹配
      '''
      return value_list

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

    0x03 将内容写入到文件

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

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

    以上是将一个word转成了txt

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

    0x04 批量处理完整代码

    以下附上完整代码

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

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

    补充:python word表格一些操作

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

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

    生成示例

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

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

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

    js
    下一篇:没有了