“招聘季收到500份简历,你熬夜看完,眼睛花了,手抽筋了,最后发现最合适的人昨天已经接受了别家的offer。”
大家好,我是你们那位“能用代码筛选简历,绝不自己一张一张看”的博主。
今天是我们30天自救计划的第二十五天,第四周 “实战演练·成为办公室魔法师” 的第四天。
如果你是HR,或者偶尔帮团队招过人,你一定懂这种痛:
- 看完还要分类:合适的放进“面试”文件夹,不合适的放进“待定”或“感谢”
一套流程下来,眼睛看花,手点抽筋,还容易漏掉好苗子。
今天,我教你用Python写一个 “简历筛选机器人”:
- 自动读取简历文件夹里的所有文件(PDF、Word)
- 自动提取文本,根据关键词打分(比如Python、Excel、工作经验)
- 自动分类:80分以上发面试邀请,60-80分进人才库,60分以下发感谢信
你只需要把简历丢进文件夹,双击脚本,然后坐等面试者上门。
场景导入:那个被500份简历淹没的HR
假设你是某公司的HR,要招一名“数据分析师”。招聘广告发出后,邮箱里收到了500份简历。
以前的你:
- 一个一个下载简历,文件名全是“张三简历.pdf”、“李四简历.doc”
- 打开PDF/Word,用肉眼扫描:有没有Python?有没有Excel?工作几年?
- 把简历拖到不同的文件夹:“面试”、“待定”、“不合适”
- 打开邮箱,新建邮件,输入候选人邮箱,写一段话:“恭喜你通过初筛……”
一周后,你终于筛选完,约好了面试。结果发现,最合适的那个人,三天前已经入职别家公司了。
HR被简历山淹没
现在的你:把所有简历丢进一个文件夹,双击Python脚本。脚本自动扫描、打分、分类、发邮件。你去喝杯咖啡,回来看到屏幕显示:
第一步:让AI帮我们写简历筛选脚本
打开ChatGPT,输入以下指令(这是比较复杂的任务,需要详细描述):
“我是一个Python初学者。我想写一个脚本,自动筛选简历。具体要求如下:
有一个文件夹叫‘简历’,里面有很多简历文件,格式可能是PDF(.pdf)或Word(.docx)。
脚本需要遍历文件夹里的所有文件,读取文本内容。
根据以下关键词打分(每个关键词有一定分值):
‘Python’:10分
‘Excel’:8分
‘数据分析’:10分
‘SQL’:8分
‘硕士’:5分
‘本科’:3分
‘工作经验’(匹配‘经验’或‘年’):每1年加2分,最多加10分(可以用正则提取数字)
计算每个简历的总分,并分类:
=80分:放入‘面试’文件夹,并发送面试邀请邮件
60-79分:放入‘人才库’文件夹,不发邮件(或发待定邮件)
<60分:放入‘不合适’文件夹,并发送感谢信
邮件发送功能:请复用Day 11的代码,但收件人从简历里提取(假设简历第一行有邮箱,或者用正则匹配邮箱)。
生成一个汇总Excel,包含文件名、分数、分类、邮箱等信息。
请帮我写出完整的Python代码,每行加注释,并告诉我需要安装哪些库,怎么运行。”
AI会给你一个很长的脚本(可能几百行),别怕,大部分是注释和错误处理。我们拆解核心部分。
核心代码片段解析
1. 读取不同格式的文件
python
import osimport reimport pandas as pdfrom pathlib import Path# 需要安装:pip install PyPDF2 python-docxdefextract_text_from_pdf(filepath):import PyPDF2 text = ""with open(filepath, 'rb') as f: reader = PyPDF2.PdfReader(f)for page in reader.pages: text += page.extract_text()return textdefextract_text_from_docx(filepath):import docx doc = docx.Document(filepath)return'\n'.join([para.text for para in doc.paragraphs])defextract_text(filepath):if filepath.endswith('.pdf'):return extract_text_from_pdf(filepath)elif filepath.endswith('.docx'):return extract_text_from_docx(filepath)else:return""
2. 关键词打分函数
python
defscore_resume(text): score = 0 text_lower = text.lower()# 关键词打分 keywords = {'python': 10,'excel': 8,'数据分析': 10,'sql': 8,'硕士': 5,'本科': 3, }for kw, pts in keywords.items():if kw in text_lower: score += pts# 工作经验(简单匹配“X年经验”或“工作X年”) exp_match = re.search(r'(\d+)[\s]*年[经验]*', text_lower)if exp_match: years = int(exp_match.group(1)) score += min(years * 2, 10) # 最多加10分return score
3. 提取邮箱(用于发送邮件)
python
defextract_email(text):# 简单正则匹配邮箱 match = re.search(r'[\w\.-]+@[\w\.-]+\.\w+', text)return match.group(0) if match elseNone
4. 主循环:处理所有简历
python
简历文件夹 = '简历'结果列表 = []for filename in os.listdir(简历文件夹): filepath = os.path.join(简历文件夹, filename)ifnot os.path.isfile(filepath):continue print(f'正在处理:{filename}') text = extract_text(filepath)ifnot text: print(f' 无法读取文本,跳过')continue score = score_resume(text) email = extract_email(text)# 分类if score >= 80: category = '面试'elif score >= 60: category = '人才库'else: category = '不合适' 结果列表.append({'文件名': filename,'分数': score,'分类': category,'邮箱': email })# 可以顺便复制文件到对应分类文件夹(可选)# 这里简化,只记录结果# 保存汇总表df = pd.DataFrame(结果列表)df.to_excel('简历筛选结果.xlsx', index=False)print('筛选完成!')
5. 发送邮件(复用Day 11代码)
在得到结果后,遍历需要发送邮件的候选人(比如分类为“面试”的),调用邮件发送函数。
python
defsend_interview_email(recipient, name='候选人'): subject = '面试邀请' body = f'{name},你好!恭喜你通过我们的简历初筛,邀请你来参加面试……'# 调用Day 11的发邮件函数 send_email(recipient, subject, body)# 在主循环后for _, row in df[df['分类']=='面试'].iterrows():if row['邮箱']: send_interview_email(row['邮箱'], row['文件名'].split('.')[0]) print(f'已发送面试邀请至:{row["邮箱"]}')
运行效果
- 脚本自动读取所有简历,打分、分类、生成汇总Excel。
- 你只需要打开Excel,看看哪些人入选,然后准备面试。
Python机器人自动打分
⚠️ 注意事项
- 隐私保护:处理真实简历时,注意遵守数据保护法规,不要泄露候选人信息。
- 关键词要合理:不同岗位关键词不同,可以根据需要调整。让AI帮你生成岗位对应的关键词列表。
- 邮件内容要个性化:上面的代码用了简单的姓名提取(从文件名),实际可能需要从简历里提取真实姓名。可以让AI改进。
- 不要完全依赖自动筛选:机器只能辅助,最终面试还是要靠人。自动筛选帮你节省初筛时间,但不要替代人的判断。
今日“捣乱作业”
作业题目:自己动手,用Python筛选几份模拟简历。
操作步骤:
- 创建模拟简历:新建3-5个Word或PDF文件,写一些假简历内容(包括姓名、邮箱、技能、工作经验等)。
- 让AI生成脚本(可以用上面的核心代码,但根据你的实际情况调整关键词)。
- 运行脚本,查看生成的汇总Excel和邮件发送情况(可以先不发真实邮件,改成打印出来)。
- 截图
自动发送面试邀请邮件
挑战版:改进脚本,让它能从简历中提取真实姓名,并在邮件中称呼“张三你好”而不是“候选人你好”。截图邮件内容。
今日金句
“筛选简历不是看谁更努力,而是看谁更会用工具。”
博主碎碎念
今天你学会了用Python自动筛选简历并发送邮件。这不仅是HR的福音,也是任何需要处理大量申请(比如招生、招聘、报名)的人的福音。
当然,这套方法也可以扩展到其他场景:比如自动筛选投稿、自动处理报名表、自动回复常见问题等。核心思路都是:让机器做重复劳动,让人做决策。
明天Day 26,我们学一个更有趣的:《如何把这一整套“偷懒大法”卖给老板?》。教你如何向老板展示你的自动化成果,顺便暗示加薪/摸鱼。这是职场必备的软技能!
HR悠闲喝茶,面试约满
评论区交给你:如果你是HR,你最想用自动化解决什么问题?如果你不是HR,你工作中有什么类似的“筛选”工作可以自动化?
点击关注,每天学一招,让Python给你打工!
#Python教学 #简历筛选 #HR神器 #自动化办公 #面试邀请