Creating a Python-powered resume builder can be a great way to automate generating professional resumes based on user input. Below is a detailed Python script that acts as a command-line resume builder. It collects user details and outputs a formatted resume in plain text or PDF (optional).
pythonimport os
try:
from fpdf import FPDF
pdf_enabled = True
except ImportError:
pdf_enabled = False
def get_input(prompt):
return input(prompt).strip()
def collect_personal_info():
print("Enter your personal information:")
name = get_input("Full Name: ")
email = get_input("Email: ")
phone = get_input("Phone Number: ")
linkedin = get_input("LinkedIn URL: ")
github = get_input("GitHub URL: ")
address = get_input("Address (optional): ")
return {
"name": name,
"email": email,
"phone": phone,
"linkedin": linkedin,
"github": github,
"address": address
}
def collect_education():
education_list = []
print("nEnter your education details. Type 'done' when finished.")
while True:
school = get_input("School/University: ")
if school.lower() == 'done':
break
degree = get_input("Degree (e.g. B.Sc. Computer Science): ")
start_year = get_input("Start Year: ")
end_year = get_input("End Year or 'Present': ")
education_list.append({
"school": school,
"degree": degree,
"start_year": start_year,
"end_year": end_year
})
return education_list
def collect_experience():
experience_list = []
print("nEnter your work experience. Type 'done' when finished.")
while True:
company = get_input("Company Name: ")
if company.lower() == 'done':
break
role = get_input("Role/Title: ")
start_date = get_input("Start Date (Month Year): ")
end_date = get_input("End Date (Month Year or Present): ")
responsibilities = []
print("Enter responsibilities/duties. Type 'done' when finished:")
while True:
duty = get_input("- ")
if duty.lower() == 'done':
break
responsibilities.append(duty)
experience_list.append({
"company": company,
"role": role,
"start_date": start_date,
"end_date": end_date,
"responsibilities": responsibilities
})
return experience_list
def collect_skills():
print("nEnter your skills separated by commas:")
skills_input = get_input("")
skills = [skill.strip() for skill in skills_input.split(",") if skill.strip()]
return skills
def collect_projects():
projects = []
print("nEnter your projects. Type 'done' when finished.")
while True:
title = get_input("Project Title: ")
if title.lower() == 'done':
break
description = get_input("Project Description: ")
link = get_input("Project Link (optional): ")
projects.append({
"title": title,
"description": description,
"link": link
})
return projects
def format_resume(data):
lines = []
lines.append(data['personal']['name'].upper())
if data['personal']['address']:
lines.append(data['personal']['address'])
lines.append(f"Email: {data['personal']['email']} | Phone: {data['personal']['phone']}")
if data['personal']['linkedin']:
lines.append(f"LinkedIn: {data['personal']['linkedin']}")
if data['personal']['github']:
lines.append(f"GitHub: {data['personal']['github']}")
lines.append("nEDUCATION")
for edu in data['education']:
lines.append(f"{edu['degree']} | {edu['school']} ({edu['start_year']} - {edu['end_year']})")
lines.append("nEXPERIENCE")
for exp in data['experience']:
lines.append(f"{exp['role']} at {exp['company']} ({exp['start_date']} - {exp['end_date']})")
for duty in exp['responsibilities']:
lines.append(f" - {duty}")
lines.append("nSKILLS")
lines.append(", ".join(data['skills']))
lines.append("nPROJECTS")
for proj in data['projects']:
lines.append(f"{proj['title']}: {proj['description']}")
if proj['link']:
lines.append(f"Link: {proj['link']}")
return "n".join(lines)
def save_text_resume(content, filename="resume.txt"):
with open(filename, "w") as f:
f.write(content)
print(f"nResume saved as {filename}")
def save_pdf_resume(content, filename="resume.pdf"):
if not pdf_enabled:
print("FPDF package is not installed. Cannot save PDF.")
return
pdf = FPDF()
pdf.add_page()
pdf.set_auto_page_break(auto=True, margin=15)
pdf.set_font("Arial", size=12)
for line in content.split('n'):
pdf.cell(0, 10, line, ln=True)
pdf.output(filename)
print(f"nResume saved as {filename}")
def main():
print("Python Resume Buildern--------------------")
personal = collect_personal_info()
education = collect_education()
experience = collect_experience()
skills = collect_skills()
projects = collect_projects()
resume_data = {
"personal": personal,
"education": education,
"experience": experience,
"skills": skills,
"projects": projects
}
resume_text = format_resume(resume_data)
print("nGenerated Resume:n")
print(resume_text)
save_text_resume(resume_text)
if pdf_enabled:
save_pdf = get_input("nDo you want to save as PDF as well? (yes/no): ").lower()
if save_pdf == "yes":
save_pdf_resume(resume_text)
else:
print("nTip: Install 'fpdf' package to enable PDF export:n pip install fpdf")
if __name__ == "__main__":
main()
How it works:
-
Runs in the terminal, prompting for info step-by-step.
-
Supports multiple entries for education, experience, projects.
-
Formats all inputs into a clean resume text.
-
Saves resume as a
.txt
file by default. -
Optionally saves as PDF if
fpdf
library is installed (pip install fpdf
).
You can extend this by adding a GUI, or exporting to DOCX using libraries like python-docx
, but this is a solid Python foundation for a resume builder. Would you want me to help build a GUI or add other export formats?
Leave a Reply