How to convert Mailchip-Like subscriber CSV to vCards using Python

If you’ve got a CSV with a header such as


you can use the following Python script to convert it to a directory of vcard files:

#!/usr/bin/env python3
import csv
import os
import argparse

# Set up argument parser
parser = argparse.ArgumentParser(description='Convert a CSV file of contacts to vCard files.')
parser.add_argument('csv_file', type=str, help='Path to the CSV file containing contacts')

args = parser.parse_args()

# Define the path for the CSV file from command line argument
csv_file_path = args.csv_file

# Create a directory to store the vCard files
vcard_directory = 'vcards'
os.makedirs(vcard_directory, exist_ok=True)

# Read the CSV file and process each contact
with open(csv_file_path, mode='r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        # Extract contact details
        email = row['Email Address']
        first_name = row['First Name']
        last_name = row['Last Name']
        latitude = row['LATITUDE']
        longitude = row['LONGITUDE']
        notes = row['NOTES']
        # Create the vCard content
        vcard_content = (
            f"FN:{first_name} {last_name}\n"
        if latitude and longitude:
            vcard_content += f"GEO:{latitude};{longitude}\n"
        if notes:
            vcard_content += f"NOTE:{notes}\n"
        vcard_content += "END:VCARD\n"
        # Define the file name for the vCard
        vcard_file_name = f"{first_name}_{last_name}.vcf".replace(" ", "_")
        vcard_file_path = os.path.join(vcard_directory, vcard_file_name)
        # Write the vCard content to the file
        with open(vcard_file_path, mode='w', encoding='utf-8') as vcard_file:

print(f"vCard files have been created in the '{vcard_directory}' directory.")