最近帮公司HR从智联招聘下载简历录入信息,写了个小程序自动录入。
第一步 把doc文件转为txt文件
因为doc文件中嵌套大量隐藏表格,超链接之类的格式,用docx这个库读取时很多信息显示不出来(也可能是我不会),就想到把doc转换为无格式的txt文件。
第二步 从txt文件中提取信息
转换为txt后惊喜的发现不同文件的相同信息基本都在相同的位置,比如姓名、性别;
对于不在相同位置的信息,就用正则表达式匹配。
第三步 把上述信息存入excel导出
第四步 把程序打包成exe文件运行
参考以下链接:*pyinstaller xxx.py
pyinstaller -F xxx.py虽然程序在jupyter notebook里可以运行,但是,打包好的exe文件总是闪退,这里出现了几个问题:
- 我把第二步 “从txt文件中提取信息” 和第三步“导出excel”分成3个函数写,一个是获取文件夹中txt文件,返回一个列表;第二个是一个一个打开文件获取信息;第三个函数是导出excel。这里第二个函数需要用到第一个函数的返回值;第三个函数也需要用到第二个步骤里返回的列表,写入excel,这里出现了点问题,后来我把这3个函数合并成一个了。
- 合并函数后还是会闪退(就只执行到把所有doc转换成txt就闪退了),但是并没有显示问题在哪。后来通过cmd里直接运行exe文件,得知了错误在哪。
参考以下链接:*显示如下错误:'utf-8' codec can't decode byte 0xbc in position 0: invalid start byte**
原因是我之前转换的txt文件中是中文,但并没有指定为utf-8格式,所以在转换txt的时候,直接指定为utf-8格式的txt。并在打开txt文件提取信息时,指定utf-8格式。
修改了这2处,exe文件终于可以运行了!
参考以下链接:*完整代码
import os
import fnmatch
import win32com.client
import xlwt
import re
PATH_DATA = os.path.abspath(r"C:\Users\Desktop\resume") #word简历存放路径
path = r"C:\Users\Desktop\resume" # 导出txt文件存放路径
def to_txt():
wordapp = win32com.client.gencache.EnsureDispatch("Word.Application")
try:
for root, dirs, files in os.walk(PATH_DATA):
for _dir in dirs:
pass
for _file in files:
if not (fnmatch.fnmatch(_file, '*.doc') or fnmatch.fnmatch(_file, '*.docx')) or _file.startswith("~"):
continue
print('_file:',_file)
file = os.path.join(root, _file)
wordapp.Documents.Open(file)
if fnmatch.fnmatch(_file, '*.doc'): #匹配doc文档
file = file[:-3] + 'txt'
else: #匹配docx文档
file = file[:-4] + 'txt'
wordapp.ActiveDocument.SaveAs(file, FileFormat=win32com.client.constants.wdFormatText,Encoding=65001) # 这里直接转换为 utf-8 格式的txt
# https://docs.microsoft.com/zh-cn/office/vba/api/Office.MsoEncoding 各种格式代码在这里查
wordapp.ActiveDocument.Close()
finally:
wordapp.Quit()
# In[25]:
def fileinfo():
files = os.listdir(path)
fileList = []
for f in files:
if(os.path.isfile(path + '/' + f)): # 判断是否为文件
if f.endswith("txt"):
fileList.append(f)
list = []
for file in fileList:
data = []
with open(path + "/" + file,'r',encoding='UTF-8') as f: # 这里指定为utf-8
for line in f:
data.append(line)
inlist = []
# 获取姓名,所有文档姓名位置相同
inlist.append(data[10][:-1])
# 获取性别,所有文档性别位置相同
inlist.append(data[13][0])
# 获取电话号码
t = []
for ls in data:
y = re.findall("1[0-9]{10}",ls)
if len(y) != 0 :
t = y
inlist.append(t[0])
# 获取邮箱
k = []
for ls in data:
y = re.findall("E-mail.*@*.*",ls)
if len(y) != 0 :
k = y
inlist.append(k[0][7:])
# 获取学校专业学历
e = []
for ls in data:
y = re.findall("教育经历.*",ls)
if len(y) != 0 :
num = data.index(ls)+1
e = data[num]
e = e.split()
inlist.append(e[-3:][0])
inlist.append(e[-3:][1])
inlist.append(e[-3:][2])
# 获取时间
inlist.append(data[7][:-1])
list.append(inlist)
# 写入excel
book = xlwt.Workbook()
sheet = book.add_sheet('sheet1')
# hang = 0
for i in range(len(list)):
for j in range(len(list[i])):
sheet.write(i, j, list[i][j])
book.save(r"C:\Users\Desktop\resume\resume"+'.xls') # excel存放路径
if __name__ == '__main__':
to_txt()
fileinfo()
os.system("pause")
















