朋友们,又到了金三银四跳槽季,你是不是也陷入了这样的循环:别问我怎么知道的,问就是亲身经历。作为程序员,我们怎么能忍受这种低效的重复劳动?今天,就让我们用Python打造一个专属的简历生成器,一键生成个性化简历,从此告别复制粘贴!先别急着写代码,我们来聊聊痛点。传统的简历制作有三大硬伤:改个日期,整个排版崩了;换个模板,所有内容重排。这种体验,堪比在Word里调整图片位置。投A公司用技术向简历,投B公司用管理向简历,投C公司...等等,我到底有几个版本?模板千篇一律,HR每天看几百份,你的简历凭什么脱颖而出?- 学习成本低:即使你是Python新手,跟着本文也能搞定
from docx import Document # 操作Word文档from reportlab.lib.pagesizes import letterfrom reportlab.pdfgen import canvas # 生成PDFimport pandas as pd # 数据处理(可选)好的程序从好的数据结构开始。简历本质上就是结构化数据,让我们用JSON来定义:"email": "zhangsan@email.com","github": "https://github.com/zhangsan""position": "Python开发工程师","programming": ["Python", "Java"],"frameworks": ["Django", "Flask"],"tools": ["Git", "Docker"]这个结构足够灵活,可以轻松扩展。比如想加个“项目经历”板块?直接加个`projects`字段就行。虽然可以直接用代码画表格、调格式,但那样太痛苦了。聪明的做法是:先做好一个漂亮的Word模板,然后用Python往里面填内容。在Word里设计好简历模板,用特殊的占位符标记需要填充的位置:from docx import Documentdef fill_resume_template(template_path, data, output_path):doc = Document(template_path)for paragraph in doc.paragraphs:if '{{name}}' in paragraph.text:paragraph.text = paragraph.text.replace('{{name}}', data['personal_info']['name'])if '{{education}}' in cell.text:edu_text = generate_education_text(data['education'])print(f"简历已生成:{output_path}")有些公司要求PDF格式,我们也要支持。ReportLab是个不错的选择:from reportlab.lib.pagesizes import letterfrom reportlab.pdfgen import canvasfrom reportlab.lib.styles import getSampleStyleSheetfrom reportlab.platypus import Paragraph, SimpleDocTemplate, Spacerdef generate_pdf_resume(data, output_path):doc = SimpleDocTemplate(output_path, pagesize=letter)styles = getSampleStyleSheet()name = data['personal_info']['name']story.append(Paragraph(name, styles['Heading1']))story.append(Spacer(1, 12))contact_info = f"{data['personal_info']['email']} | {data['personal_info']['phone']}"story.append(Paragraph(contact_info, styles['Normal']))story.append(Spacer(1, 24))story.append(Paragraph("教育经历", styles['Heading2']))for edu in data['education']:edu_text = f"{edu['school']} {edu['degree']} - {edu['major']} ({edu['time']})"story.append(Paragraph(edu_text, styles['Normal']))def optimize_for_position(resume_data, job_description):keywords = extract_keywords(job_description)resume_text = json.dumps(resume_data)if keyword.lower() not in resume_text.lower():missing_keywords.append(keyword)for kw in missing_keywords:def generate_variations(base_data, variations):tech_focused = base_data.copy()tech_focused['summary'] = "资深Python开发工程师,专注后端架构"management_focused = base_data.copy()management_focused['summary'] = "技术团队负责人,擅长项目管理和跨部门协作"return [tech_focused, management_focused]parser = argparse.ArgumentParser(description='简历生成器')parser.add_argument('--template', help='Word模板路径')parser.add_argument('--data', help='简历数据JSON文件')parser.add_argument('--output', help='输出文件路径')parser.add_argument('--format', choices=['docx', 'pdf'], default='docx')parser.add_argument('--optimize', help='根据职位描述优化')args = parser.parse_args()with open(args.data, 'r', encoding='utf-8') as f:resume_data = json.load(f)with open(args.optimize, 'r', encoding='utf-8') as f:resume_data = optimize_for_position(resume_data, job_desc)if args.format == 'docx':fill_resume_template(args.template, resume_data, args.output)generate_pdf_resume(resume_data, args.output)if __name__ == '__main__':python resume_generator.py --data my_info.json --template template.docx --output resume.docxdef save_version(resume_data, message):timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")filename = f"resume_{timestamp}.json"with open(filename, 'w', encoding='utf-8') as f:json.dump(resume_data, f, ensure_ascii=False, indent=2)repo.index.add([filename])repo.index.commit(f"简历更新: {message}")import matplotlib.pyplot as pltdef plot_skill_radar(skills_data):categories = list(skills_data.keys())values = [len(skills_data[cat]) for cat in categories]categories += categories[:1]ax = plt.subplot(111, projection='polar')ax.fill(angles, values, alpha=0.25)ax.set_xticks(angles[:-1])ax.set_xticklabels(categories[:-1])plt.savefig('skill_radar.png')中文字符在PDF中显示乱码?记得使用支持中文的字体:from reportlab.pdfbase import pdfmetricsfrom reportlab.pdfbase.ttfonts import TTFontpdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf'))不同Word版本对样式的支持不同,尽量使用基础的格式设置。定期导出JSON数据,避免程序bug导致数据丢失。2. 安装依赖:`pip install -r requirements.txt`我已经将基础版本开源在GitHub(地址见文末),欢迎Star和PR。你可以:开发这个简历生成器,最初只是为了偷懒。但做着做着发现,这不仅仅是一个工具,更是对自己职业生涯的系统化梳理。工具的价值不在于它有多酷炫,而在于它能否真正提升你的效率,释放你的时间去做更有价值的事情。所以,别再手动复制粘贴了。花一个周末,打造属于你自己的简历生成器。这不仅能让你的求职更高效,还能在面试时自豪地说:“我连简历生成工具都是自己写的。”项目地址: https://github.com/yourusername/resume-generator(示例地址,请替换为实际地址)今日金句: 好的程序员应该懒一点——不是不愿意工作,而是不愿意做重复的工作。本文由锤子简历原创,转载请注明出处。关注锤子简历公众号,获取更多求职干货和工具推荐。🎁 白嫖福利 🎁
制作简历找免费的简历模板,一定要看这里!
「锤子简历」给粉丝打造了一个完全免费的Wrod简历模板的下载频道。
直达地址:
https://www.100chui.com/moban/
锤子简历推出了AI写简历免费体验,除了会写还会做精美的排版设计(好用的很!)。
直达地址:
https://www.100chui.com/jianlimuban/